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.

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