1. คำนำ
เมื่อเร็ว ๆ นี้ฉันกำลังสัมภาษณ์และตรวจสอบมัลติเธรดอีกครั้งโดยหวังว่าจะได้เข้าใจการมัลติเธรดมัลติเธรดให้ลึกซึ้งยิ่งขึ้น
1. กระบวนการคืออะไร?
1). เพื่อให้เข้าใจหัวข้อเราต้องเข้าใจกระบวนการก่อน ในแง่ของ Layman กระบวนการคือแอปพลิเคชันที่ทำงานในระบบ
2). แต่ละเธรดมีอยู่อย่างอิสระและทำงานในพื้นที่หน่วยความจำที่ทุ่มเทและได้รับการป้องกัน
3). ตัวอย่างเช่นเมื่อเปิดระบบ QQ หรือ XCODE จะเปิดสองกระบวนการแยกต่างหากตามที่แสดงในรูป:
4) เราสามารถดูกระบวนการที่เปิดใช้งานในระบบ MAC ผ่าน "การตรวจสอบกิจกรรม"
2. กระทู้คืออะไร?
1). กระบวนการจะต้องมีเธรดเพื่อดำเนินการงานนั่นคือกระบวนการต้องมีเธรดอย่างน้อยหนึ่งเธรด
2). เธรดเป็นหน่วยดำเนินการพื้นฐานของกระบวนการและงานทั้งหมดของกระบวนการ (โปรแกรม) จะดำเนินการในเธรด
3). ตัวอย่างเช่นการใช้ kugou เพื่อเล่นเพลงและการใช้ Thunder เพื่อดาวน์โหลดภาพยนตร์ทั้งหมดจำเป็นต้องทำงานในเธรดดังที่แสดงในรูป:
3. เธรดอนุกรมคืออะไร?
1). เธรดจะถูกดำเนินการแบบอนุกรม (ดำเนินการตามลำดับ) ซึ่งหมายความว่าเธรดสามารถเรียกใช้งานหนึ่งงานได้ภายในเวลาเดียวกันเท่านั้น
2). แผนภาพการดำเนินการแบบอนุกรมเช่นหนึ่งเธรดดาวน์โหลด 3 ไฟล์ (ไฟล์ A, B, C)
4. มัลติเธรดคืออะไร?
1). หลายเธรดสามารถเปิดได้ในกระบวนการและแต่ละเธรดสามารถทำงานที่แตกต่างกันพร้อมกัน (พร้อมกัน)
2). รายการความสัมพันธ์ที่คล้ายกัน: กระบวนการ ----> เวิร์กช็อป; เธรด ----> พนักงานเวิร์กช็อป
3). แผนภาพแบบมัลติเธรดเช่นการเปิด 3 เธรดในเวลาเดียวกันเพื่อดาวน์โหลด 3 ไฟล์ (ไฟล์ A, B, C)
5. หลักการมัลติเธรด
1). ในเวลาเดียวกัน CPU สามารถเรียกใช้เธรดหนึ่งเธรดได้และมีเพียงเธรดเดียวเท่านั้นที่ใช้งานได้ (การดำเนินการ)
2). การดำเนินการหลายเธรดพร้อมกัน (พร้อมกัน) จริง ๆ แล้ว CPU กำหนดเวลาอย่างรวดเร็ว (สวิตช์) ระหว่างหลายเธรด
3). หาก CPU กำหนดเวลาเธรดอย่างรวดเร็วเพียงพอมันจะทำให้เกิดภาพลวงตาของการดำเนินการหลายเธรดพร้อมกัน
4). ข้อเสียของมัลติเธรด:
1. แต่ละเธรดจะใช้พื้นที่หน่วยความจำจำนวนหนึ่ง (โดยค่าเริ่มต้น: เธรดหลักมี 1MB และเธรดลูกมี 512KB)
หากเปิดเธรดมากเกินไปมันจะใช้พื้นที่หน่วยความจำจำนวนมากซึ่งจะทำให้ประสิทธิภาพของโปรแกรมลดลง
2. ยิ่งเธรดมากเท่าไหร่ค่าใช้จ่ายของเธรดการกำหนดเวลา CPU ก็จะยิ่งมากขึ้น (คล้ายกับคนงานในโรงงานมากเท่าไหร่ค่าใช้จ่ายในโรงงานก็จะยิ่งมากขึ้น)
3. ทำให้การเขียนโปรแกรมซับซ้อนขึ้น: เช่นการสื่อสารข้อมูลแบบหลายเธรดและการแบ่งปันข้อมูลระหว่างหลายเธรด
5). ข้อดีของมัลติเธรด:
1. สามารถปรับปรุงประสิทธิภาพการดำเนินการของโปรแกรมได้อย่างเหมาะสม
2. สามารถปรับปรุงการใช้ทรัพยากรได้อย่างเหมาะสม (CPU และการใช้หน่วยความจำ)
6. กระทู้หลักคืออะไร?
1) เธรดจะเปิดโดยค่าเริ่มต้นหลังจากเปิดโปรแกรม iOS เธรดนี้เรียกว่า "เธรดหลัก" หรือ "เธรด UI"
2). ฟังก์ชั่นหลักของเธรดหลัก:
1. แสดง/รีเฟรชอินเตอร์เฟส UI
2. จัดการกิจกรรม UI (เช่นคลิกเหตุการณ์, เหตุการณ์เลื่อน, ลากกิจกรรม ฯลฯ )
3). หมายเหตุเกี่ยวกับเธรดหลัก:
1. อย่าวางการดำเนินงานที่ใช้เวลานานในหัวข้อหลัก การดำเนินการใช้เวลานานในหัวข้อหลักจะทำให้โปรแกรมล่าช้า
7. การสาธิตการดำเนินการใช้เวลานาน
1) การสาธิตทำงานโดยตรงในเธรดหลัก
-(เป็นโมฆะ) touchesbegan: (nsset <uitouch *> *) สัมผัสกับ EventEvent: (uievent *) เหตุการณ์ {// รับวิธีการดำเนินการปัจจุบันและเธรดปัจจุบัน // number == เธรดหลัก // number! = เธรดอื่น ๆ การดำเนินการ UI เพื่อพูดติดอ่าง [Self LottimeOperation];}#Pragma mark-time-consuming Operation- (เป็นโมฆะ) การใช้เวลานาน {สำหรับ (int i =; i <; i ++) {nslog (@"%d", i);}}}}}}}}}2) การสาธิตการทำงานในเธรดเด็ก
-(เป็นโมฆะ) Touchesbegan: (nsset <uitouch *> *) สัมผัสกับ Eventive: (uievent *) {// รับวิธีการดำเนินการปัจจุบันและเธรดปัจจุบัน // number == เธรดหลัก // number! = เธรดอื่น ๆ ในเธรดเด็กที่จะดำเนินการโดยไม่ส่งผลกระทบต่อการดำเนินการ UI [Self PerformSelectorInbackground: @Selector (LongtimeOperation) ด้วยคำสั่ง: nil];}#pragma การดำเนินการมาร์ค-เวลาที่ต้องใช้เวลานาน-(เป็นโมฆะ) {สำหรับ (int i =; i <; i ++) {nslog (@"%d"เนื้อหาข้างต้นเป็นความรู้หลายเธรดของ iOS ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ!