> On 29 Aug 2016, at 21:37, Tudor Girba <[email protected]> wrote:
> 
> Hi Denis,
> 
> Thanks a lot for this analysis!
> 
> In summary, the Bloc events are faster because:
> 1. they store the subscriptions in OrderedCollection instead of IdentitySet. 
> This is likely something we can improve in Announcements.
> 2. they are unsafe.
> 
> For 1., the only reason I can think of is to prevent the user to register 
> twice the same object by mistake. I think this is an optimization that should 
> be the responsibility of the user.

Alternatively we may use OrderedCollection and just check if it includes the 
subscription before adding. I think that more events are fired than clients are 
subscribed per a period of time

Uko

> 
> For 2. the question is if Bloc really does not need the mutex.
> 
> Cheers,
> Doru
> 
> 
> 
>> On Aug 29, 2016, at 6:36 PM, Denis Kudriashov <[email protected]> wrote:
>> 
>> And expenses to deliver announcement caused also by protection and usage of 
>> IdentitySet.
>> Also in announcements we first collect all subscriptions with interest to 
>> separate collection and only after we iterate and process given announcement.
>> 
>> But in Bloc you use #select:thenDo: method instead. It is unsafe because 
>> event handlers can be modified during delivering (by producing new 
>> subscriptions or by unsubscribing inside handlers). 
>> 
>> So if you want to address it (and I sure you do) it will lead to same code 
>> and performance of announcements. 
>> 
>> 
>> 
>> 
>> 2016-08-29 18:05 GMT+02:00 Denis Kudriashov <[email protected]>:
>> Thank's. 
>> I try tests for subscribing and what I found is:
>> 
>> Main problem that subscriptions inside SubscriptionRegistry are managed as 
>> IdentitySet which of cause much slower for addition then OrderedCollection. 
>> We probably could use OrderedCollection here because items are always 
>> created on fly and identitySet has no sense.
>> 
>> Another problem is access protection by mutex (semaphore) which make it 3 
>> times slower. 
>> 
>> So with OrderedCollection and disabled mutex performance for subscribing is 
>> same.
>> 
>> I pretty sure that protection is required for Block handlers too. 
>> 
>> 2016-08-29 17:18 GMT+02:00 Glenn Cavarlé <[email protected]>:
>> Ha...  tag doesn't work...
>> 
>> You can load Bloc and show the tests using this script:
>> Gofer it
>>    smalltalkhubUser: 'Pharo' project: 'Bloc';
>>    configuration;
>>    loadDevelopment.
>> Gofer it
>>    smalltalkhubUser: 'Pharo' project: 'Bloc';
>>    package: 'Bloc-Tests';
>>    load.
>> BlAnnouncerVsBlEventRegistryTest browse
>> 
>> 
>> 
>> 
>> -----
>> Glenn Cavarlé
>> --
>> View this message in context: 
>> http://forum.world.st/About-the-non-use-of-Announcer-in-Bloc-tp4913008p4913088.html
>> Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
>> 
>> 
>> 
> 
> --
> www.tudorgirba.com
> www.feenk.com
> 
> "Every successful trip needs a suitable vehicle."
> 
> 
> 
> 
> 
> 


Reply via email to