การควบคุมภาวะพร้อมกัน

การทำงานพร้อมกันเป็นวิธีดำเนินการมากกว่าหนึ่งสิ่งในเวลาเดียวกัน ในแอปพลิเคชัน Concurrency หมายถึงงานหลายงานที่ทำงานในเวลาเดียวกัน / พร้อมกัน

การทำงานพร้อมกันสามารถทำให้แอปพลิเคชันของคุณเร็วขึ้นสะอาดขึ้นและมอบประสบการณ์ที่ดีขึ้นให้กับผู้ใช้ การใช้งานมัลติเธรดดูเหมือนจะยากสำหรับนักพัฒนาหลายคน แต่ก็เหมือนกับ APINSOperation และ Dispatch Queues ทำให้ง่ายต่อการใช้การทำงานพร้อมกันและมัลติเธรดในแอปพลิเคชัน

แกรนด์เซ็นทรัลจัดส่ง

GCD เป็น API ที่ใช้บ่อยที่สุดในการจัดการโค้ดพร้อมกันและดำเนินการแบบอะซิงโครนัสในระดับระบบ GCD จัดเตรียมและใช้คิวของงาน คิวเหล่านี้เป็นโครงสร้างข้อมูลที่ใช้คำศัพท์ FIFO กล่าวคืองานในตำแหน่งแรกในคิวจะถูกดำเนินการก่อนและงานในคิวสุดท้ายจะถูกดำเนินการในที่สุด

ตัวอย่างเช่น - สมมติว่าสายการจองตั๋วหนังถ้าคุณเป็นคนสุดท้ายคุณจะได้ตั๋วใบสุดท้ายและถ้ามีคนมาตามคุณเขาจะได้ตั๋วหลังจากคุณ

จัดส่งคิว

จัดส่งคิวเป็นวิธีง่ายๆในการทำงานแบบอะซิงโครนัสและพร้อมกันในแอปพลิเคชันของคุณ คิวมีสองประเภท -

  • Serial Queues - จัดเก็บงานในลักษณะอนุกรมและดำเนินการทีละงาน

  • Concurrent Queues - จัดเก็บงานในลักษณะอนุกรมและดำเนินการทีละงาน

ฟังก์ชันบางอย่างที่ใช้ในการสร้างหรือรับคิว ได้แก่ -

dispatch_queue_create       
// create a serial or concurrent queue 
dispatch_queue_get_label     
// get the label of a given queue 
dispatch_get_main_queue   
// get the one and only main queue 
dispatch_get_global_queue    
// get one of the global concurrent queues

การเพิ่มงานในคิว

มีฟังก์ชันสองประเภทซึ่งช่วยในการเพิ่มงานลงในคิว พวกเขาคือ -

Synchronous Functions -

  • dispatch_once - จะส่งงานเพียงครั้งเดียวตลอดอายุการใช้งานของแอปพลิเคชัน

  • dispatch_sync - จะส่งงานไปยังคิวและจะส่งคืนเมื่องานเสร็จสิ้นเท่านั้น

Asynchronous Functions -

  • Dispatch_async - จะส่งงานและส่งคืน

  • Dispatch_after - ส่งคืนทันที แต่เกิดความล่าช้าในช่วงเวลาหนึ่ง

  • Dispatch_async - ส่งคืนทันที แต่มีการส่งงานหลายครั้ง

ตัวอย่างรหัส

ต่อไปนี้เป็นโค้ดตัวอย่างสำหรับการเพิ่มงานในคิว

dispatch_async(dispatch_get_main_queue(), update_block);  
// add update_block to main queue  

dispatch_apply(i, some_queue, work_block)  
// add work_block to some_queue i times  

dispatch_sync(background_queue, blocking_block)  
// add blocking block to background queue and wait for completion

ตัวอย่างทั่วไปของการใช้ Queue

โค้ดต่อไปนี้เป็นตัวอย่างของการใช้คิว

dispatch_async(background_queue, ^ { 
   // Perform code that takes long time, here. 
   Dispatch_async(dispatch_get_main_queue(), ^ { 
      //Some other task, generally UI. 
   }); 
});

นี่คือทั้งหมดที่เราจะทำด้วยการควบคุมการทำงานพร้อมกันเนื่องจากมีข้อมูลเพียงพอจนกว่าคุณจะเป็นนักพัฒนา iOS ระดับกลาง

หมั่นฝึกฝนแนวคิดที่คุณได้เรียนรู้และพยายามปรับเปลี่ยนและบูรณาการตามความต้องการของคุณ