{"action":"opened","issue":{"url":"https://api.github.com/repos/david415/HoneyBadger/issues/14","labels_url":"https://api.github.com/repos/david415/HoneyBadger/issues/14/labels{/name}","comments_url":"https://api.github.com/repos/david415/HoneyBadger/issues/14/comments","events_url":"https://api.github.com/repos/david415/HoneyBadger/issues/14/events","html_url":"https://github.com/david415/HoneyBadger/issues/14","id":55559600,"number":14,"title":"make flow state processing goroutines be unidirectional","user":{"login":"david415","id":50611,"avatar_url":"https://avatars.githubusercontent.com/u/50611?v=3","gravatar_id":"","url":"https://api.github.com/users/david415","html_url":"https://github.com/david415","followers_url":"https://api.github.com/users/david415/followers","following_url":"https://api.github.com/users/david415/following{/other_user}","gists_url":"https://api.github.com/users/david415/gists{/gist_id}","starred_url":"https://api.github.com/users/david415/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/david415/subscriptions","organizations_url":"https://api.github.com/users/david415/orgs","repos_url":"https://api.github.com/users/david415/repos","events_url":"https://api.github.com/users/david415/events{/privacy}","received_events_url":"https://api.github.com/users/david415/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/david415/HoneyBadger/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/david415/HoneyBadger/labels/performance%20improvement","name":"performance improvement","color":"5319e7"}],"state":"open","locked":false,"assignee":{"login":"david415","id":50611,"avatar_url":"https://avatars.githubusercontent.com/u/50611?v=3","gravatar_id":"","url":"https://api.github.com/users/david415","html_url":"https://github.com/david415","followers_url":"https://api.github.com/users/david415/followers","following_url":"https://api.github.com/users/david415/following{/other_user}","gists_url":"https://api.github.com/users/david415/gists{/gist_id}","starred_url":"https://api.github.com/users/david415/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/david415/subscriptions","organizations_url":"https://api.github.com/users/david415/orgs","repos_url":"https://api.github.com/users/david415/repos","events_url":"https://api.github.com/users/david415/events{/privacy}","received_events_url":"https://api.github.com/users/david415/received_events","type":"User","site_admin":false},"milestone":null,"comments":0,"created_at":"2015-01-27T00:40:33Z","updated_at":"2015-01-27T00:40:33Z","closed_at":null,"body":"The goal is to improve performance. The way to do that is to process state events for a given TCP connection with two goroutines instead of one. Each goroutine would process a \"flow\" (a unidirectional flow of packets). \r\n\r\nWe need to think carefully about how these two flow processing goroutine pipelines would read and change the TCP FSM state. Is it possible to avoid locks or channel synchronizations? For HoneyBadger's purpose of passively tracking TCP connections... Yes. Yes it is possible to implement various naive pseudo-emulations of TCP... and use the concurrency model i just outlined to increase performance... and not use any locks.\r\n\r\n\r\n"}}