Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> IOS

แกรนด์ เซ็นทรัล ดิสแพตช์ (GCD)


Grand Central Dispatch (GCD) - เทคโนโลยีสำหรับระบบปฏิบัติการ Mac OS X และ iOS ของ Apple เป็นการผสมผสานระหว่างส่วนขยายกับภาษา C, API และไลบรารีรันไทม์ที่ช่วยให้นักพัฒนาแอปพลิเคชันสามารถระบุส่วนของโค้ดที่จะเรียกใช้ได้ ขนาน. เช่นเดียวกับ OpenMP GCD จะจัดการรายละเอียดส่วนใหญ่ของเธรด GCD ระบุส่วนขยายของภาษา C และ C++ ที่เรียกว่าบล็อก บล็อกเป็นเพียงหน่วยของงานที่มีในตัวเอง มันถูกระบุโดยคาเร็ต ˆ ที่ด้านหน้าของวงเล็บปีกกา { } ตัวอย่างง่ายๆ ของบล็อกแสดงอยู่ด้านล่าง &ลบ;

{
   ˆprintf("This is a block");
}

มันกำหนดเวลาบล็อกสำหรับการดำเนินการรันไทม์โดยวางไว้บนคิวการจัดส่ง เมื่อลบบล็อกออกจากคิว จะกำหนดบล็อกให้กับเธรดที่พร้อมใช้งานจากพูลเธรดที่จัดการ GCD ระบุคิวการจัดส่งสองประเภท:แบบอนุกรมและแบบพร้อมกัน บล็อกที่วางอยู่บนคิวอนุกรมจะถูกลบออกในลำดับ FIFO เมื่อบล็อกถูกลบออกจากคิวแล้ว จะต้องดำเนินการให้เสร็จสิ้นก่อนที่จะลบบล็อกอื่น แต่ละกระบวนการมีคิวซีเรียลของตัวเอง (เรียกว่าคิวหลัก) นักพัฒนาสามารถสร้างคิวอนุกรมเพิ่มเติมที่เป็นแบบโลคัลสำหรับกระบวนการเฉพาะ คิวอนุกรมมีประโยชน์สำหรับการรับรองการดำเนินการตามลำดับของงานต่างๆ บล็อกที่วางอยู่บนคิวพร้อมกันจะถูกลบออกในลำดับ FIFO แต่หลายบล็อกอาจถูกลบในคราวเดียว ดังนั้นจึงอนุญาตให้หลายบล็อกดำเนินการพร้อมกัน มีคิวการจัดส่งพร้อมกันทั่วทั้งระบบสามคิว และมีการแยกแยะตามลำดับความสำคัญ:ต่ำ ค่าเริ่มต้น และสูง ลำดับความสำคัญแสดงถึงการประมาณความสำคัญสัมพัทธ์ของบล็อก พูดง่ายๆ ก็คือ บล็อกที่มีลำดับความสำคัญสูงกว่าควรอยู่ในคิวการจัดส่งที่มีลำดับความสำคัญสูง ส่วนรหัสต่อไปนี้แสดงให้เห็นถึงการรับคิวพร้อมกันที่มีลำดับความสำคัญเริ่มต้นและส่งบล็อกไปยังคิวโดยใช้ฟังก์ชันการจัดส่ง async() -

dispatch_queue_t queue = dispatch_get_global_queue
(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch async(queue, ˆ{ printf("This is a block."); });

ภายในเธรดพูลของ GCD ประกอบด้วยเธรด POSIX GCD จัดการพูลอย่างแข็งขัน ทำให้จำนวนเธรดเพิ่มขึ้นและลดขนาดตามความต้องการของแอปพลิเคชันและความสามารถของระบบ