{"action":"created","issue":{"url":"https://api.github.com/repos/eslint/eslint/issues/3565","labels_url":"https://api.github.com/repos/eslint/eslint/issues/3565/labels{/name}","comments_url":"https://api.github.com/repos/eslint/eslint/issues/3565/comments","events_url":"https://api.github.com/repos/eslint/eslint/issues/3565/events","html_url":"https://github.com/eslint/eslint/issues/3565","id":103776806,"number":3565,"title":"Lint multiple files in parallel","user":{"login":"ilyavolodin","id":1380062,"avatar_url":"https://avatars.githubusercontent.com/u/1380062?v=3","gravatar_id":"","url":"https://api.github.com/users/ilyavolodin","html_url":"https://github.com/ilyavolodin","followers_url":"https://api.github.com/users/ilyavolodin/followers","following_url":"https://api.github.com/users/ilyavolodin/following{/other_user}","gists_url":"https://api.github.com/users/ilyavolodin/gists{/gist_id}","starred_url":"https://api.github.com/users/ilyavolodin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ilyavolodin/subscriptions","organizations_url":"https://api.github.com/users/ilyavolodin/orgs","repos_url":"https://api.github.com/users/ilyavolodin/repos","events_url":"https://api.github.com/users/ilyavolodin/events{/privacy}","received_events_url":"https://api.github.com/users/ilyavolodin/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/eslint/eslint/labels/accepted","name":"accepted","color":"0052cc"},{"url":"https://api.github.com/repos/eslint/eslint/labels/cli","name":"cli","color":"eb6420"},{"url":"https://api.github.com/repos/eslint/eslint/labels/feature","name":"feature","color":"bfd4f2"},{"url":"https://api.github.com/repos/eslint/eslint/labels/needs-bikeshedding","name":"needs-bikeshedding","color":"f7c6c7"}],"state":"open","locked":false,"assignee":{"login":"ilyavolodin","id":1380062,"avatar_url":"https://avatars.githubusercontent.com/u/1380062?v=3","gravatar_id":"","url":"https://api.github.com/users/ilyavolodin","html_url":"https://github.com/ilyavolodin","followers_url":"https://api.github.com/users/ilyavolodin/followers","following_url":"https://api.github.com/users/ilyavolodin/following{/other_user}","gists_url":"https://api.github.com/users/ilyavolodin/gists{/gist_id}","starred_url":"https://api.github.com/users/ilyavolodin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ilyavolodin/subscriptions","organizations_url":"https://api.github.com/users/ilyavolodin/orgs","repos_url":"https://api.github.com/users/ilyavolodin/repos","events_url":"https://api.github.com/users/ilyavolodin/events{/privacy}","received_events_url":"https://api.github.com/users/ilyavolodin/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/eslint/eslint/milestones/13","html_url":"https://github.com/eslint/eslint/milestones/v2.0.0","labels_url":"https://api.github.com/repos/eslint/eslint/milestones/13/labels","id":1277998,"number":13,"title":"v2.0.0","description":"","creator":{"login":"nzakas","id":38546,"avatar_url":"https://avatars.githubusercontent.com/u/38546?v=3","gravatar_id":"","url":"https://api.github.com/users/nzakas","html_url":"https://github.com/nzakas","followers_url":"https://api.github.com/users/nzakas/followers","following_url":"https://api.github.com/users/nzakas/following{/other_user}","gists_url":"https://api.github.com/users/nzakas/gists{/gist_id}","starred_url":"https://api.github.com/users/nzakas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nzakas/subscriptions","organizations_url":"https://api.github.com/users/nzakas/orgs","repos_url":"https://api.github.com/users/nzakas/repos","events_url":"https://api.github.com/users/nzakas/events{/privacy}","received_events_url":"https://api.github.com/users/nzakas/received_events","type":"User","site_admin":false},"open_issues":6,"closed_issues":1,"state":"open","created_at":"2015-08-28T17:36:35Z","updated_at":"2015-08-29T17:09:02Z","due_on":null,"closed_at":null},"comments":20,"created_at":"2015-08-28T18:59:59Z","updated_at":"2015-08-30T14:46:26Z","closed_at":null,"body":"This is a discussion issue for adding ability to run eslint in parallel for multiple files.\r\n\r\nThe idea is that ESLint is mostly CPU bound, not IO bound, so creating multiple threads (for machine with multiple cores) might (and probably will) increase performance in a meaningful way. The downside is that currently ESLint's codebase is synchronous. So this would require rewriting everything up to and including eslint.js to be asynchronous, which would be a major effort.\r\n\r\nI played with this a little while ago and found a few libraries for Node that handle thread pool, including detection of number of cores available on the machine.\r\n* [Node-threads-a-gogo](https://github.com/xk/node-threads-a-gogo) - seems pretty good, but looks dead.\r\n* [nPool](https://github.com/inh3/nPool) - seems actively in development, but has native components (C++)\r\n* [Node WebWorkers](https://github.com/audreyt/node-webworker-threads) - seems pretty dead too.\r\n* [Parallel](https://github.com/adambom/parallel.js) - seems dead, and no pool implementation.\r\n* [Node Clusters](https://nodejs.org/api/cluster.html) - not stable yet, and probably isn't going to be available on Node v0.10\r\n* WebWorkers - seems that they are only implemented in io.js\r\nAnd there are a ton of other libraries out there for this.\r\n\r\nIf anyone had any experience writing multithreaded applications for node.js and would like to suggest alternatives or comment on the above list, please feel free.\r\n\r\nP.S. https://www.airpair.com/javascript/posts/which-async-javascript-libraries-should-i-use"},"comment":{"url":"https://api.github.com/repos/eslint/eslint/issues/comments/136151391","html_url":"https://github.com/eslint/eslint/issues/3565#issuecomment-136151391","issue_url":"https://api.github.com/repos/eslint/eslint/issues/3565","id":136151391,"user":{"login":"ilyavolodin","id":1380062,"avatar_url":"https://avatars.githubusercontent.com/u/1380062?v=3","gravatar_id":"","url":"https://api.github.com/users/ilyavolodin","html_url":"https://github.com/ilyavolodin","followers_url":"https://api.github.com/users/ilyavolodin/followers","following_url":"https://api.github.com/users/ilyavolodin/following{/other_user}","gists_url":"https://api.github.com/users/ilyavolodin/gists{/gist_id}","starred_url":"https://api.github.com/users/ilyavolodin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ilyavolodin/subscriptions","organizations_url":"https://api.github.com/users/ilyavolodin/orgs","repos_url":"https://api.github.com/users/ilyavolodin/repos","events_url":"https://api.github.com/users/ilyavolodin/events{/privacy}","received_events_url":"https://api.github.com/users/ilyavolodin/received_events","type":"User","site_admin":false},"created_at":"2015-08-30T14:46:26Z","updated_at":"2015-08-30T14:46:26Z","body":"@pnstickne #2998 \r\n@platinumazure I think I would like to first prove that there's something to gain by going async/multithreaded just so nobody would waist their time creating a very large PR that will then be closed, because there is no gain."}}