{
    "componentChunkName": "component---src-templates-blog-post-tsx",
    "path": "/phan-phoi-xu-ly-trong-nodejs-child-processes/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Chung Tran","author":"@chungtran4078"}},"markdownRemark":{"id":"8061be75-5194-55b3-8cfa-e3f3fc54927d","excerpt":"Như chúng ta đã biết Javascript trong Nodejs là single threading, tuy vậy khi cần xử lý nhiều việc trong cùng thời điểm thì Nodejs vẫn thực hiện tốt nhờ cơ chế…","html":"<p>Như chúng ta đã biết Javascript trong Nodejs là single threading, tuy vậy khi cần xử lý nhiều việc trong cùng thời điểm thì Nodejs vẫn thực hiện tốt nhờ cơ chế non-blocking I/O cho phép các xử lý chạy bất đồng bộ mà không bị block lẫn nhau.</p>\n<p>Tuy nhiên ở 1 cuộc chơi mà có các tác vụ ngốn CPU thì mọi chuyện lại khác. Trong khi Java, Golang … thể hiện được ưu điểm vượt trội do có hỗ trợ multi threading và tận dụng tối đa tài nguyên máy chủ thì Nodejs với single threading tỏ ra yếu thế, tất nhiên rồi, 1 tay sao so được với 3 đầu sáu tay.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/007307894c936305cf69cbc518dcadab/d165a/image.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIDBQb/xAAVAQEBAAAAAAAAAAAAAAAAAAADBP/aAAwDAQACEAMQAAABeO5zjm4xSP8A/8QAGRABAQADAQAAAAAAAAAAAAAAAQACEBET/9oACAEBAAEFAvN4wGWhi//EABcRAAMBAAAAAAAAAAAAAAAAAAABMRL/2gAIAQMBAT8BazB0/8QAGBEBAQADAAAAAAAAAAAAAAAAAQACERL/2gAIAQIBAT8Bwe3bF//EABgQAAIDAAAAAAAAAAAAAAAAAAFREBEg/9oACAEBAAY/Ag1F4//EABsQAQACAgMAAAAAAAAAAAAAAAEAESExYXGh/9oACAEBAAE/ITMJ7x2c9QCxHTEbVVuaz//aAAwDAQACAAMAAAAQmz//xAAXEQEBAQEAAAAAAAAAAAAAAAABABFB/9oACAEDAQE/EMmdTVN//8QAFxEAAwEAAAAAAAAAAAAAAAAAAAExEf/aAAgBAgEBPxBjKKQbFh//xAAcEAEBAQEAAgMAAAAAAAAAAAABEQAhMUFRcZH/2gAIAQEAAT8QIwXVDRPXw51FhWDP7o41frcIeY91MwqrV7uOeb//2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Child processes trong Nodejs\"\n        title=\"Child processes trong Nodejs\"\n        src=\"/static/007307894c936305cf69cbc518dcadab/1c72d/image.jpg\"\n        srcset=\"/static/007307894c936305cf69cbc518dcadab/a80bd/image.jpg 148w,\n/static/007307894c936305cf69cbc518dcadab/1c91a/image.jpg 295w,\n/static/007307894c936305cf69cbc518dcadab/1c72d/image.jpg 590w,\n/static/007307894c936305cf69cbc518dcadab/a8a14/image.jpg 885w,\n/static/007307894c936305cf69cbc518dcadab/fbd2c/image.jpg 1180w,\n/static/007307894c936305cf69cbc518dcadab/d165a/image.jpg 1400w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span>\nLấy ví dụ mình đang có bài toán:\nMình có 2 API, 1 cái sẽ trả về số fibonacci ứng với vị trí và người dùng gửi lên và 1 cái trả về “Hello world”. Code sẽ đơn giản như sau:</p>\n<p><strong>File: <code class=\"language-text\">server.js</code></strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> express <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"express\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/greeting\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  res<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello world\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/get-fibonacci\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> startTime <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token function\">fibonacci</span><span class=\"token punctuation\">(</span><span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//parseInt is for converting string to number</span>\n    <span class=\"token keyword\">const</span> endTime <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        number<span class=\"token operator\">:</span> <span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        fibonacci<span class=\"token operator\">:</span> result<span class=\"token punctuation\">,</span>\n        time<span class=\"token operator\">:</span> endTime<span class=\"token punctuation\">.</span><span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> startTime<span class=\"token punctuation\">.</span><span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">\"ms\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">fibonacci</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">n</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>n <span class=\"token operator\">&lt;=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">1</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token function\">fibonacci</span><span class=\"token punctuation\">(</span>n <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token function\">fibonacci</span><span class=\"token punctuation\">(</span>n <span class=\"token operator\">-</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">listen</span><span class=\"token punctuation\">(</span><span class=\"token number\">3000</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"listening on port 3000\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Thử chạy lần lượt <code class=\"language-text\">http://localhost:3000/get-fibonacci?number=45</code> và <code class=\"language-text\">http://localhost:3000/greeting</code>, ta sẽ thấy luồng chính đã sử dụng hết tài nguyên cho việc tính số fibonacci nên request <code class=\"language-text\">http://localhost:3000/greeting</code> sẽ ở trạng thái chờ cho đến khi số fibonacci được tính xong. Đấy là mới có 2 request thôi đấy, đối với server phục vụ hàng trăm req/s thì sao nhỉ, chả lẽ tất cả các request sẽ phải chờ cái ông tính fibonacci xong mới được xài tiếp ???</p>\n<p>Hhmm…phải làm sao, phải làm sao! Đây là lúc chúng ta cần multi-threading, phải đưa các xử lý tốn CPU ra khỏi luồng chính.</p>\n<p><strong>Nodejs cung cấp 3 giải pháp để giải quyết vấn đề trên:</strong></p>\n<ul>\n<li>Child processes</li>\n<li>Worker threads</li>\n<li>Cluster</li>\n</ul>\n<p>Chúng ta sẽ lần lượt sử dụng các giải pháp trên để giải quyết bài toán này xem chúng có ưu nhược điểm gì và nên dùng cái nào nhé.</p>\n<h2>Sử dụng Child processes</h2>\n<p>Module child_process cung cấp khả năng tạo ra process được cấp phát bộ nhớ riêng. Giao tiếp giữa các process này được thiết lập thông qua IPC (inter-process communication) do hệ điều hành cung cấp.</p>\n<p>Có 3 method chúng ta cần quan tâm khi làm việc với child_process:</p>\n<ul>\n<li>child_process.spawn()</li>\n<li>child_process.fork()</li>\n<li>child_process.exec()</li>\n</ul>\n<h3>child_process.spawn()</h3>\n<p>Tạo ra 1 process bất đồng bộ, process này có thể chạy bất kỳ command nào mà bạn có thể chạy từ terminal, ví dụ: <code class=\"language-text\">pwd</code>, <code class=\"language-text\">ls</code>, <code class=\"language-text\">mkdir</code>, <code class=\"language-text\">python fibonacci.py 45</code>… Kết quả được trả về thông qua streams API.</p>\n<h3>child_process.fork()</h3>\n<p>Tạo ra process con với process này là 1 module js, có thể giao tiếp giữa process cha và con thông qua method send (gửi) và on (nhận)</p>\n<h3>child_process.exec()</h3>\n<p>Giống child_process.spawn() nhưng kết quả được trả về thông qua callback function</p>\n<p>Như vậy, nhờ child_process ta có thể khởi tạo 1 process con với phần xử lý sử dụng ngôn ngữ khác chứ không nhất thiết phải là js. Tuy nhiên trong khuôn khổ bài viết này mình sẽ sử dụng js do vậy <code class=\"language-text\">child_process.fork()</code> là method mình sẽ dùng, các method khác có thể xem ở documentation của Nodejs:</p>\n<p><strong>Tạo file xử lý main process: server.js</strong>\nĐây thực chất là file xử lý bình thường như khi chúng ta dùng single thread, ở đây mình đặt tên là <code class=\"language-text\">server.js</code> cho quen thuộc, không có gì magic ở đây cả. Chỗ nào magic mình sẽ comment giải thích.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> express <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"express\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> fork <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"child_process\"</span><span class=\"token punctuation\">)</span>\n\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/greeting\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello world\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/get-fibonacci\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> childProcess <span class=\"token operator\">=</span> <span class=\"token function\">fork</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./child.js\"</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// tham số đầu vào chính là path của file chứa code tính fibonacci </span>\n    childProcess<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> number<span class=\"token operator\">:</span> <span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// gửi data qua cho child process thông qua IPC</span>\n    \n    <span class=\"token keyword\">const</span> startTime <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n    childProcess<span class=\"token punctuation\">.</span><span class=\"token function\">on</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"message\"</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">message</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// nhận kết quả trả về sau khi child process xử lý xong</span>\n        <span class=\"token keyword\">const</span> endTime <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        res<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            number<span class=\"token operator\">:</span> <span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            fibonacci<span class=\"token operator\">:</span> message<span class=\"token punctuation\">,</span>\n            time<span class=\"token operator\">:</span> endTime<span class=\"token punctuation\">.</span><span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> startTime<span class=\"token punctuation\">.</span><span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">\"ms\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">listen</span><span class=\"token punctuation\">(</span><span class=\"token number\">3636</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"listening on port 3636\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>Tạo file xử lý child process: child.js</strong>\nFile cũng chỉ là file chứa hàm tính fibonacci thôi, không có gì đâu. Code ngắn gọn như sau:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">process<span class=\"token punctuation\">.</span><span class=\"token function\">on</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"message\"</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">message</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// nhận data từ luồng chính gửi vào, ở đây là giá trị number</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token function\">fibonacci</span><span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span>\n  process<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span>\n  process<span class=\"token punctuation\">.</span><span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">fibonacci</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">n</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>n <span class=\"token operator\">&lt;=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">1</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token function\">fibonacci</span><span class=\"token punctuation\">(</span>n <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token function\">fibonacci</span><span class=\"token punctuation\">(</span>n <span class=\"token operator\">-</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Thử chạy xem nào <code class=\"language-text\">http://localhost:3636/get-fibonacci?number=45</code> và <code class=\"language-text\">http://localhost:3636/greeting</code>. Mặc dù request tính fibonacci vẫn đang xử lý nhưng các request khác vẫn được hoàn thành ngay lập tức.</p>\n<p>Như vậy khi có yêu cầu đi vào từ luồng chính thì nodejs sẽ tạo 1 child process để xử lý riêng tác vụ đó do đó các request tiếp theo vẫn được xử lý mà không phải chờ.</p>\n<p>Tưởng tượng tàu Ever Given là một siêu tàu hàng dài hơn 400m, nặng hơn 220.000 tấn, tuy khổng lồ là vậy nhưng tàu lại được trang bị động cơ do tàu khựa sản xuất và hậu quả là nhiều lần đang đi vào kênh đào Suez nó đã bị chết máy dẫn đến các tàu phía sau cũng bị kẹt lại suốt nhiều ngày, mỗi lần như vậy gây thiệt hại hàng tỷ Biden khiến giới chức Ai Cập rất đau đầu.<br/>\nBiết được thông tin đó, một anh chàng sinh năm 96 học BK cơ khí nhưng đã rẽ ngang sang IT đề nghị gặp giới chức Ai Cập để hiến kế.<br/>\nVà ngay ngày hôm sau họ đã cho đào 1 nhánh kênh phụ rẽ ra từ nhánh chính để phục vụ riêng Ever Given, và từ bây giờ cứ mỗi lần nó đi vào kênh sẽ ngay lập tức được đưa qua nhánh phụ để lỡ nó có chết máy đi nữa thì không ảnh hưởng đến các tàu thuyền khác, giao thông trên kênh đào Suez từ đó diễn ra rất thuận lợi.</p>\n<h2>FBI warning</h2>\n<p>Việc giao tiếp giữa các process chỉ có thể giữa process cha và con, các process con không thể giao tiếp với nhau.<br/>\nMỗi child process được phân bổ bộ nhớ độc lập do đó chi phí cho process là lớn hơn nhiều so với thread (1 đơn vị trong process). Có thể xem bài này để hiểu rõ hơn về Process và Thread: <a href=\"https://www.geeksforgeeks.org/difference-between-process-and-thread/\" target=\"_blank\" rel=\"nofollow\">Difference between Process and Thread</a></p>\n<p><strong>Ô kê bài sau chúng ta sẽ sử dụng Worker threads để giải quyết bài toán trên.</strong></p>","frontmatter":{"title":"Phân phối xử lý trong Nodejs P1: Child processes","date":"2022-05-28","category":"Nodejs","tags":["nodejs","performance","optimization"],"image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#3878f8","images":{"fallback":{"src":"/static/007307894c936305cf69cbc518dcadab/7eacc/image.jpg","srcSet":"/static/007307894c936305cf69cbc518dcadab/ca4ba/image.jpg 158w,\n/static/007307894c936305cf69cbc518dcadab/513e2/image.jpg 315w,\n/static/007307894c936305cf69cbc518dcadab/7eacc/image.jpg 630w,\n/static/007307894c936305cf69cbc518dcadab/ea258/image.jpg 1260w","sizes":"(min-width: 630px) 630px, 100vw"},"sources":[{"srcSet":"/static/007307894c936305cf69cbc518dcadab/a9a4f/image.webp 158w,\n/static/007307894c936305cf69cbc518dcadab/fc4e9/image.webp 315w,\n/static/007307894c936305cf69cbc518dcadab/666d8/image.webp 630w,\n/static/007307894c936305cf69cbc518dcadab/c4973/image.webp 1260w","type":"image/webp","sizes":"(min-width: 630px) 630px, 100vw"}]},"width":630,"height":315}}}}}},"pageContext":{"slug":"/phan-phoi-xu-ly-trong-nodejs-child-processes/","previous":{"fields":{"slug":"/4-nguyen-tac-co-ban-trong-lap-trinh/"},"frontmatter":{"title":"3 nguyên tắc cơ bản trong lập trình mà LTV nào cũng phải biết","category":"Code","tags":["clean code"]}},"next":{"fields":{"slug":"/phan-phoi-xu-ly-trong-nodejs-worker-threads/"},"frontmatter":{"title":"Phân phối xử lý trong Nodejs P2: Worker threads","category":"Nodejs","tags":["nodejs","performance","optimization"]}}}},
    "staticQueryHashes": ["3649515864","3894061898"]}