{"action":"created","issue":{"url":"https://api.github.com/repos/bennidi/mbassador/issues/99","labels_url":"https://api.github.com/repos/bennidi/mbassador/issues/99/labels{/name}","comments_url":"https://api.github.com/repos/bennidi/mbassador/issues/99/comments","events_url":"https://api.github.com/repos/bennidi/mbassador/issues/99/events","html_url":"https://github.com/bennidi/mbassador/pull/99","id":58889945,"number":99,"title":"Concurrent map","user":{"login":"dorkbox","id":5301521,"avatar_url":"https://avatars.githubusercontent.com/u/5301521?v=3","gravatar_id":"","url":"https://api.github.com/users/dorkbox","html_url":"https://github.com/dorkbox","followers_url":"https://api.github.com/users/dorkbox/followers","following_url":"https://api.github.com/users/dorkbox/following{/other_user}","gists_url":"https://api.github.com/users/dorkbox/gists{/gist_id}","starred_url":"https://api.github.com/users/dorkbox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dorkbox/subscriptions","organizations_url":"https://api.github.com/users/dorkbox/orgs","repos_url":"https://api.github.com/users/dorkbox/repos","events_url":"https://api.github.com/users/dorkbox/events{/privacy}","received_events_url":"https://api.github.com/users/dorkbox/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2015-02-25T11:52:14Z","updated_at":"2015-02-25T16:59:56Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/bennidi/mbassador/pulls/99","html_url":"https://github.com/bennidi/mbassador/pull/99","diff_url":"https://github.com/bennidi/mbassador/pull/99.diff","patch_url":"https://github.com/bennidi/mbassador/pull/99.patch"},"body":"starting place for enhancements. This by itself isn't a huge improvement, as ultimately the async threading model is what needs to be tweaked. ConcurrentHashMapV8 really shines once those tweaks are made.\r\n\r\nChanging the IConcurrentSet -> Set, simplifies testing with different data structures, since there are many different Weak/Strong/Soft concurrent implementations available."},"comment":{"url":"https://api.github.com/repos/bennidi/mbassador/issues/comments/76002042","html_url":"https://github.com/bennidi/mbassador/pull/99#issuecomment-76002042","issue_url":"https://api.github.com/repos/bennidi/mbassador/issues/99","id":76002042,"user":{"login":"bennidi","id":1842420,"avatar_url":"https://avatars.githubusercontent.com/u/1842420?v=3","gravatar_id":"","url":"https://api.github.com/users/bennidi","html_url":"https://github.com/bennidi","followers_url":"https://api.github.com/users/bennidi/followers","following_url":"https://api.github.com/users/bennidi/following{/other_user}","gists_url":"https://api.github.com/users/bennidi/gists{/gist_id}","starred_url":"https://api.github.com/users/bennidi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bennidi/subscriptions","organizations_url":"https://api.github.com/users/bennidi/orgs","repos_url":"https://api.github.com/users/bennidi/repos","events_url":"https://api.github.com/users/bennidi/events{/privacy}","received_events_url":"https://api.github.com/users/bennidi/received_events","type":"User","site_admin":false},"created_at":"2015-02-25T16:59:56Z","updated_at":"2015-02-25T16:59:56Z","body":"Yeah, I was trying to do the same but did not find a model to decouple\nwrites from reads. It is mainly due to the case when two adjacent listeners\nare removed concurrently. Removal operations cut out their target by\njoining its neighbours. Different interleavings for the scenario of\nadjacent removals could end up leaving one of the two listeners still in\nthe list (one operation might overwrite the other).\n\nI think it is really tricky to fully parallelize reads and writes. I don't\nfeel able to handle this complexity - ingenuity did not strike me yet :)\n\nI think it is not worth it because the code is quite clean and not overly\ncomplex. And it works. And it's still quite fast.\n\n2015-02-25 17:27 GMT+01:00 dorkbox <notifications@github.com>:\n\n> Let me revisit if ConcurrentHashMaps are exactly necessary, since it might\n> not be. At one point they were needed, as I tried to make\n> subscribe/unsubscribe fully concurrent - which turns out to really\n> complicate everything, so I didn't pursue it further.\n>\n> —\n> Reply to this email directly or view it on GitHub\n> <https://github.com/bennidi/mbassador/pull/99#issuecomment-75992464>.\n>\n"}}