ควรเปิดโปรเซสจำนวนเท่าไหร่

วิธีการตั้งค่าโปรเซส

จำนวนโปรเซสขึ้นอยู่กับคุณสมบัติ count (ระบบ Windows ไม่รองรับการตั้งค่าจำนวนโปรเซส) เช่น โค้ดด้านล่าง

use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$http_worker = new Worker("http://0.0.0.0:2345");

// ## เริ่มต้นโปรเซส 4 ตัวให้บริการ ##
$http_worker->count = 4;

...

การตั้งค่าจำนวนโปรเซสต้องพิจารณาสิ่งต่อไปนี้

1、จำนวน CPU core

2、ขนาดของหน่วยความจำ

3、ลักษณะของธุรกิจว่าเน้นที่ IO หนักหรือ CPU หนัก

หลักการตั้งค่าจำนวนโปรเซส

1、หน่วยความจำที่แต่ละโปรเซสใช้รวมกันต้องน้อยกว่าหน่วยความจำทั้งหมด (โดยทั่วไปแล้วโปรเซสธุรกิจแต่ละตัวใช้หน่วยความจำประมาณ 40M)

2、ถ้าเป็นประเภท IO หนัก ซึ่งหมายถึงธุรกิจที่เกี่ยวข้องกับการเข้าถึง IO ประเภท บล็อก เช่น การเข้าถึง MySQL, Redis เป็นต้น การเข้าถึงจะเป็นแบบบล็อก โปรเซสสามารถเปิดได้มากขึ้น เช่น ตั้งค่าเป็น 3 เท่าของจำนวน CPU core หากธุรกิจมีการรอคอยที่บล็อกจำนวนมาก สามารถเพิ่มจำนวนโปรเซสตามความเหมาะสม เช่น 8 เท่าหรือมากกว่านั้น โปรดทราบว่า non-blocking IO ถือเป็นการใช้ CPU หนัก ไม่ใช่ IO หนัก

3、ถ้าเป็นประเภท CPU หนัก ซึ่งหมายถึงธุรกิจที่ไม่มีการใช้จ่าย บล็อก IO เช่น การใช้ asynchronous IO เพื่ออ่านข้อมูลจากเครือข่าย ในกรณีที่โปรเซสจะไม่ถูกบล็อกโดยโค้ดธุรกิจ สามารถตั้งค่าจำนวนโปรเซสให้เท่ากับจำนวน CPU core ได้

ค่าตัวอย่างสำหรับการตั้งค่าจำนวนโปรเซส

หากโค้ดธุรกิจเน้นที่ IO หนัก ควรตั้งค่าจำนวนโปรเซสตามระดับความหนาของ IO เช่น 3-8 เท่าของจำนวน CPU core

หากโค้ดธุรกิจเน้นที่ CPU หนัก สามารถตั้งค่าจำนวนโปรเซสให้เท่ากับจำนวน CPU core

หมายเหตุ

IO ของ Workerman เองเป็นแบบ non-blocking เช่น Connection->send เป็นต้น ซึ่งถือเป็นการดำเนินการที่มีการใช้ CPU หนัก หากไม่แน่ใจว่าธุรกิจของคุณเน้นประเภทใด สามารถตั้งค่าจำนวนโปรเซสเป็นประมาณ 3 เท่าของจำนวน CPU core ได้
นอกจากนี้จำนวนโปรเซสไม่จำเป็นต้องมีมากเกินไป การเปิดโปรเซสมากเกินไปจะทำให้ค่าใช้จ่ายในการสลับโปรเซสสูงขึ้น ซึ่งส่งผลต่อประสิทธิภาพได้ในระดับหนึ่ง