คำถามติดแท็ก thread


7
มีการใช้เธรดเป็นกระบวนการบน Linux หรือไม่
ฉันจะอ่านหนังสือเล่มนี้การเขียนโปรแกรม Linux ขั้นสูงโดย Mark Mitchell, Jeffrey Oldham และ Alex Samuel มันมาจากปี 2001 เก่าไปหน่อย แต่ฉันคิดว่ามันค่อนข้างดี แต่อย่างใด อย่างไรก็ตามฉันมาถึงจุดที่มันแตกต่างจากสิ่งที่ Linux ของฉันผลิตในการส่งออกเปลือก บนหน้า 92 (116 ในตัวแสดง) บทที่ 4.5 การใช้งานเธรด GNU / Linux เริ่มต้นด้วยย่อหน้าที่มีคำสั่งนี้: การติดตั้งเธรด POSIX บน GNU / Linux แตกต่างจากการใช้เธรดในระบบที่คล้ายกับ UNIX อื่น ๆ ในวิธีการที่สำคัญ: บน GNU / Linux เธรดจะถูกใช้เป็นกระบวนการ ดูเหมือนว่าจะเป็นจุดสำคัญและจะแสดงในภายหลังด้วยรหัส C ผลลัพธ์ในหนังสือเล่มนี้คือ: main thread …

3
การสร้างเธรดล้มเหลวด้วย“ ทรัพยากรไม่พร้อมใช้งานชั่วคราว” ด้วยเคอร์เนล 4.3
ฉันกำลังเรียกใช้เซิร์ฟเวอร์นักเทียบท่าบน Arch Linux (เคอร์เนล 4.3.3-2) พร้อมคอนเทนเนอร์หลายตัว ตั้งแต่รีบูตครั้งล่าสุดของฉันทั้งเซิร์ฟเวอร์นักเทียบท่าและโปรแกรมแบบสุ่มภายในคอนเทนเนอร์เกิดข้อผิดพลาดพร้อมกับข้อความว่าไม่สามารถสร้างเธรดหรือ (บ่อยกว่า) เพื่อแยก ข้อผิดพลาดที่เฉพาะเจาะจงจะแตกต่างกันขึ้นอยู่กับโปรแกรม Resource temporarily unavailableแต่ส่วนใหญ่ของพวกเขาดูเหมือนจะพูดถึงข้อผิดพลาดที่เฉพาะเจาะจง ดูที่ส่วนท้ายของโพสต์นี้เพื่อดูข้อความแสดงข้อผิดพลาด ขณะนี้มีคนจำนวนมากที่ได้รับข้อความแสดงข้อผิดพลาดนี้และมีคำตอบมากมาย สิ่งที่น่าผิดหวังจริงๆคือทุกคนดูเหมือนจะคาดเดาว่าปัญหาจะสามารถแก้ไขได้อย่างไร แต่ดูเหมือนว่าไม่มีใครที่จะชี้ให้เห็นว่าจะระบุสาเหตุของปัญหาที่อาจเกิดขึ้นได้บ้าง ฉันได้รวบรวมสาเหตุที่เป็นไปได้ 5 ข้อสำหรับข้อผิดพลาดและวิธีการตรวจสอบว่าไม่มีอยู่ในระบบของฉัน: มีข้อ จำกัด ทั้งระบบเกี่ยวกับจำนวนเธรดที่กำหนดค่าใน/proc/sys/kernel/threads-max( ซอร์ส ) 60613ในกรณีของฉันนี้ถูกตั้งค่า ทุกเธรดใช้พื้นที่บางส่วนในสแต็ก ขีด จำกัด ขนาดสแต็กถูกกำหนดค่าโดยใช้ulimit -s( แหล่งที่มา ) ข้อ จำกัด สำหรับเปลือกของฉันเคยเป็น8192แต่ฉันได้เพิ่มมันโดยใส่* soft stack 32768เข้าไป/etc/security/limits.confดังนั้นulimit -sตอนนี้มันกลับ32768มา ฉันได้เพิ่มมันสำหรับกระบวนการนักเทียบท่าด้วยการใส่LimitSTACK=33554432ลงไป/etc/systemd/system/docker.service( แหล่งที่มาและฉันตรวจสอบว่าข้อ จำกัด ที่ใช้โดยการดู/proc/<pid of docker>/limitsและโดยการทำงานulimit -sภายในคอนเทนเนอร์นักเทียบท่า ทุกเธรดใช้หน่วยความจำบางส่วน ulimit -vวงเงินหน่วยความจำเสมือนมีการกำหนดค่าการใช้ …
39 linux  docker  limit  fork  thread 

5
จะยกเลิกการใช้เธรด (และลูก) ทั้งหมดของกระบวนการเดียวบน Linux ได้อย่างไร
ลินุกซ์ยังไม่ได้ปฏิบัติตามมาตรฐาน POSIX.1 ซึ่งระบุว่า a reniceในกระบวนการส่งผลกระทบต่อ "เธรดขอบเขตระบบทั้งหมดในกระบวนการ" เนื่องจากตามpthreads (7) doc "เธรดไม่ได้แชร์ค่า nice ที่ดี" อย่างไรก็ตามบางครั้งมันสามารถสะดวกในการrenice"ทุกอย่าง" ที่เกี่ยวข้องกับกระบวนการที่กำหนด (ตัวอย่างหนึ่งคือกระบวนการลูก Apache และเธรดทั้งหมดของพวกเขา) ดังนั้น, ฉันจะกระทู้reniceทั้งหมดที่เป็นของกระบวนการที่กำหนดได้อย่างไร ฉันจะกระบวนการลูกreniceทั้งหมดที่เป็นของกระบวนการที่กำหนดได้อย่างไร ฉันกำลังมองหาทางออกที่ค่อนข้างง่าย ฉันรู้ว่าบางครั้งกลุ่มกระบวนการอาจมีประโยชน์อย่างไรก็ตามพวกเขาไม่ตรงกับสิ่งที่ฉันต้องการทำเสมอ: พวกเขาสามารถรวมกระบวนการที่กว้างขึ้นหรือชุดที่แตกต่างกัน การใช้การcgroupจัดการโดยsystemdอาจมีประโยชน์ แต่แม้ว่าฉันสนใจที่จะได้ยินเกี่ยวกับมันฉันส่วนใหญ่มองหาโซลูชัน "มาตรฐาน" แก้ไข: ยังman (7) pthreadsบอกว่า "กระทู้ทั้งหมดในกระบวนการจะอยู่ในกลุ่มด้ายเดียวกันสมาชิกทั้งหมดของกลุ่มกระทู้ใช้ PID เดียวกัน" ดังนั้นมันเป็นไปได้ที่จะมีreniceบางสิ่งที่ไม่มี PID ของตัวเองหรือไม่?
22 linux  process  nice  thread 

3
Linux บอกเธรดนอกเหนือจากกระบวนการย่อยได้อย่างไร
task_structลินุกซ์ไม่จริงความแตกต่างระหว่างกระบวนการและหัวข้อและการดำเนินการทั้งสองเป็นโครงสร้างข้อมูล ดังนั้นลินุกซ์ให้อะไรกับบางโปรแกรมเพื่อบอกเธรดของกระบวนการจากกระบวนการลูก? ตัวอย่างเช่นมีวิธีดูรายละเอียดของเธรดทั้งหมดที่กระบวนการมีใน Linux หรือไม่? ขอบคุณ
21 linux  process  thread 

3
เคอร์เนล Linux มีกระบวนการเคอร์เนลจริง ๆ หรือไม่
ฉันอ่านในหลาย ๆ ที่ที่ Linux สร้างเคอร์เนลเธรดสำหรับแต่ละเธรดผู้ใช้ใน Java VM (ฉันเห็นคำว่า "kernel thread" ที่ใช้ในสองวิธีที่แตกต่างกัน: เธรดที่สร้างขึ้นเพื่อทำงานหลักของระบบปฏิบัติการและ เธรดที่ระบบปฏิบัติการทราบถึงและกำหนดเวลาเพื่อทำงานของผู้ใช้ ฉันกำลังพูดถึงประเภทหลัง) เคอร์เนลเธรดเหมือนกับกระบวนการเคอร์เนลเนื่องจากกระบวนการ Linux สนับสนุนพื้นที่หน่วยความจำที่แบ่งใช้ระหว่างพาเรนต์และชายด์หรือเป็นเอนทิตีที่แตกต่างกันอย่างแท้จริงหรือไม่?

2
วิธีการฆ่าแต่ละด้ายภายใต้กระบวนการใน linux?
เหล่านี้เป็นเธรดแต่ละตัวของกระบวนการรับแพ็คเก็ต มีวิธีใดที่จะฆ่าเธรดเดี่ยว ๆ หรือไม่? Linux มีคำสั่งเฉพาะใด ๆ ที่สามารถฆ่าหรือส่งสัญญาณหยุดไปยังเธรดใด ๆ ภายใต้กระบวนการได้หรือไม่?
13 linux  kill  thread 

1
ความสัมพันธ์ระหว่างกระบวนการเคอร์เนลเธรดกระบวนการที่มีน้ำหนักเบาและเธรดผู้ใช้ใน Unix คืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา Unix Internal โดย Vahalia มีตัวเลขแสดงความสัมพันธ์ระหว่างกระบวนการเคอร์เนลเธรดกระบวนการน้ำหนักเบาและเธรดผู้ใช้ หนังสือเล่มนี้ให้ความสนใจมากที่สุดกับ SVR4.2 และยังสำรวจ 4.4BSD, Solaris 2.x, Mach และ Digital UNIX โดยละเอียด โปรดทราบว่าฉันไม่ได้ถามเกี่ยวกับ Linux สำหรับแต่ละกระบวนการมีกระบวนการที่มีน้ำหนักเบาอย่างน้อยหนึ่งกระบวนการอ้างอิงหรือไม่? รูปที่ 3.4 ดูเหมือนจะบอกว่าใช่ ทำไมรูปที่ 3.5 (a) แสดงกระบวนการโดยตรงที่ด้านบนของ CPU โดยไม่มีกระบวนการที่มีน้ำหนักเบาในระหว่างนั้น สำหรับกระบวนการที่มีน้ำหนักเบาแต่ละครั้งจะมีเคอร์เนลเธรดเดียวที่อ้างอิงกระบวนการที่มีน้ำหนักเบาหรือไม่ รูปที่ 3.4 ดูเหมือนจะบอกว่าใช่ ทำไมรูปที่ 3.5 (b) แสดงกระบวนการที่มีน้ำหนักเบาโดยตรงบนกระบวนการโดยที่ไม่มีเคอร์เนลเธรด เคอร์เนลเธรดเป็นเอนทิตีเดียวที่สามารถกำหนดเวลาได้หรือไม่? กระบวนการที่มีน้ำหนักเบาถูกกำหนดเวลาโดยอ้อมผ่านการกำหนดตารางเวลาเธรดเคอร์เนลพื้นฐานหรือไม่? กระบวนการที่กำหนดไว้ทางอ้อมผ่านการกำหนดเวลากระบวนการน้ำหนักเบาพื้นฐานหรือไม่ ปรับปรุง: ฉันถามคำถามที่คล้ายกันสำหรับ Linux กระบวนการน้ำหนักเบาติดอยู่กับเคอร์เนลเธรดใน …

5
กระบวนการเทียบกับ (เธรด)
โดยทั่วไปแล้วแอปพลิเคชัน Linux จะแยก exec (ด้วย execve ()) แต่แอปพลิเคชัน Java และ Apache MPM บางตัวใช้เธรด หากการฟอร์กใช้ fork + exec เพื่อวางไข่กระบวนการเวอร์ชันขั้นสูงสำหรับเธรดคืออะไร JVM หรือ Worker MPM มีเธรดอย่างไร
9 process  fork  thread 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.