เมื่อคุณเขียนA | B
กระบวนการทั้งสองแล้วทำงานแบบขนาน หากคุณเห็นว่าพวกเขาใช้เพียงแกนเดียวนั่นอาจเป็นเพราะการตั้งค่าความสัมพันธ์ของ CPU (อาจมีเครื่องมือบางอย่างในการวางกระบวนการที่มีความสัมพันธ์ต่างกัน) หรือเนื่องจากกระบวนการหนึ่งไม่เพียงพอที่จะเก็บทั้งแกนไว้และระบบ " ชอบ "ไม่ต้องใช้คอมพิวเตอร์
เพื่อให้ทำงานได้หลาย B กับหนึ่งที่คุณจะต้องใช้เครื่องมือเช่นsplit
กับ--filter
ตัวเลือก:
A | split [OPTIONS] --filter="B"
อย่างไรก็ตามเรื่องนี้มีแนวโน้มที่จะทำให้เกิดความสับสนในลำดับของเอาต์พุตเนื่องจากงาน B จะไม่ทำงานทั้งหมดด้วยความเร็วเท่ากัน ถ้าเรื่องนี้เป็นเรื่องที่คุณอาจต้องเปลี่ยนเส้นทาง B ที่ i cat
ส่งออกไปยังไฟล์กลางและเย็บเข้าด้วยกันในตอนท้ายใช้ ในทางกลับกันอาจต้องใช้พื้นที่ดิสก์มาก
ตัวเลือกอื่น ๆ ที่มีอยู่ (เช่นคุณสามารถ จำกัด ตัวอย่างของ B แต่ละคนเพื่อการส่งออกบรรทัดบัฟเฟอร์เดียวรอจนกว่าจะมีทั้ง "รอบ" ของ B ได้เสร็จสมบูรณ์เรียกใช้เทียบเท่าของลดการsplit
's แผนที่และcat
การส่งออกชั่วคราวร่วมกัน) ด้วยระดับประสิทธิภาพที่แตกต่างกัน ตัวเลือก 'รอบ' ที่อธิบายไว้เช่นจะรออินสแตนซ์ที่ช้าที่สุดของ Bให้เสร็จดังนั้นมันจะขึ้นอยู่กับการบัฟเฟอร์สำหรับ B [m]buffer
อาจช่วยได้หรือไม่ก็ได้ขึ้นอยู่กับการปฏิบัติการ
ตัวอย่าง
สร้างตัวเลข 1,000 ตัวแรกและนับจำนวนคู่ขนาน:
seq 1 1000 | split -n r/10 -u --filter="wc -l"
100
100
100
100
100
100
100
100
100
100
หากเราต้อง "ทำเครื่องหมาย" บรรทัดเราจะเห็นว่าแต่ละบรรทัดแรกถูกส่งไปยังกระบวนการ # 1 แต่ละบรรทัดที่ห้าไปยังกระบวนการ # 5 และอื่น ๆ ยิ่งไปกว่านั้นในเวลาที่ใช้split
ในการวางไข่กระบวนการที่สองวิธีแรกเป็นวิธีที่ดีในโควต้า:
seq 1 1000 | split -n r/10 -u --filter="sed -e 's/^/$RANDOM - /g'" | head -n 10
19190 - 1
19190 - 11
19190 - 21
19190 - 31
19190 - 41
19190 - 51
19190 - 61
19190 - 71
19190 - 81
เมื่อรันบนเครื่องแบบ 2 คอseq
ร์split
และwc
กระบวนการแบ่งปันคอร์; แต่เมื่อมองใกล้ระบบจะออกจากสองกระบวนการแรกบน CPU0 และแบ่ง CPU1 ระหว่างกระบวนการของผู้ปฏิบัติงาน:
%Cpu0 : 47.2 us, 13.7 sy, 0.0 ni, 38.1 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 15.8 us, 82.9 sy, 0.0 ni, 1.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5314 lserni 20 0 4516 568 476 R 23.9 0.0 0:03.30 seq
5315 lserni 20 0 4580 720 608 R 52.5 0.0 0:07.32 split
5317 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.86 wc
5318 lserni 20 0 4520 572 484 S 14.0 0.0 0:01.88 wc
5319 lserni 20 0 4520 576 484 S 13.6 0.0 0:01.88 wc
5320 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.85 wc
5321 lserni 20 0 4520 572 484 S 13.3 0.0 0:01.84 wc
5322 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.86 wc
5323 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.86 wc
5324 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.87 wc
สังเกตว่าโดยเฉพาะที่split
กินซีพียูเป็นจำนวนมาก สิ่งนี้จะลดลงตามความต้องการของ A; กล่าวคือถ้า A เป็นกระบวนการที่หนักกว่าseq
ค่าใช้จ่ายที่เกี่ยวข้องsplit
จะลดลง แต่ถ้า A เป็นกระบวนการที่มีน้ำหนักเบามากและ B ค่อนข้างเร็ว (ดังนั้นคุณต้องการไม่เกิน 2-3 B เพื่อให้สอดคล้องกับ A) จากนั้นการขนานกับsplit
(หรือท่อโดยทั่วไป) อาจไม่คุ้มค่า
A | B | C
ขนานในกระบวนการที่แยกกันเนื่องจากลักษณะของท่อ (B ต้องรอเอาต์พุตของ A, C ต้องรอเอาต์พุตของ B) มันอาจยังคงเป็นเชิงเส้นในบางกรณี มันทั้งหมดขึ้นอยู่กับชนิดของผลผลิตที่พวกเขาผลิต มีหลายกรณีที่การเรียกใช้หลาย ๆ ครั้งB
จะช่วยได้มากอาจเป็นไปได้ว่าตัวอย่าง wc แบบขนานช้ากว่าปกติwc
เนื่องจากการแยกอาจใช้ทรัพยากรมากกว่าการนับบรรทัดตามปกติ ใช้ด้วยความระมัดระวัง