Multitask trong lập trình IOS (Part 1)
Bài đăng này đã không được cập nhật trong 3 năm
Chào các bạn, hôm nay mình sẽ trình bày về chủ đề “Multitask và câu chuyện làm việc nhóm”
Trước khi đi vào chủ đề chính chúng ta hãy thử xem xét sự tương đồng của CPU và bộ não chúng ta. Thủa còn bé thơ, khi mới chập chững vào cấp học đầu tiên là tiểu học, chúng ta đã bắt đầu phải giải quyết các bài toán từ đơn giản đến nâng cao. Ban đầu là học cộng trừ nhân chia, sau đó học thêm logic, rồi các bài toán kết hợp các yếu tố trên… Rồi lên cấp 2, cấp 3 chúng ta liên tục trau dồi bộ não của mình để có thể giải quyết được các bài toán phức tạp hơn nữa. Ở giai đoạn này, bộ não chúng ta vẫn đủ sức 1 mình giải quyết các bài toán cho dù vô cùng rắc rối. Rồi đến khi bước vào đại học, có những bài tập lớn hay chuyên đề chúng ta ko thể giải quyết 1 mình được nữa, chúng ta bắt đầu phải làm việc nhóm. Và rồi khi đi làm công ty, gặp các dự án, chúng ta lại phải tiếp tục làm việc nhóm. Có nghĩa là, càng về sau các bài toán càng phức tạp và đòi hỏi sự tham gia của nhiều bộ não hợp lại.
CPU (bộ xử lý trung tâm) mà chúng ta hay nghe nói đến cũng tương tự như vậy. Ban đầu, nó cũng chỉ được cấu tạo từ những mạch logic vô cùng đơn giản nhằm giải quyết các bài toán cộng trừ nhân chia vô cùng đơn giản. Như chúng ta, nó cũng phải lớn lên, nó được thiết kế với tần số xung nhịp ngày càng lớn để có thể giải toán nhanh hơn. Mật độ transitor (có thể hiểu như nơtron thần kinh trong bộ não) ngày càng dày đặc hơn trên 1 đơn vị diện tích, qua đó nhiều mạch logic được tích hợp hơn -> xử lý được các bài toán phức tạp hơn. Và cũng cho đến 1 ngày, xuất hiện quá nhiều các tác vụ phải thực hiện trên thiết bị điện tử, nó cũng phải nghĩ đến chuyện làm việc nhóm. Và câu chuyện số multiCore (nhiều Core) ra đời. Mỗi core sẽ cung cấp cho ứng dụng 1 luồng làm việc (thread) để xử lý 1 bài toán (1 list instruction) ở 1 thời điểm nhất định(1 xung nhịp CPU). Và công nghệ hyperThreading (siêu phân luồng) ra đời, 1 core vật lý có thể tạo ra 2 core ảo để thực hiện xử lý 2 bài toán cùng 1 lúc (1 core tạo ra 2 luồng làm việc). Cũng giống như trong nhóm xuất hiện siêu nhân đầu khủng, 1 lúc làm bằng 2 người làm vậy.
Vậy, câu chuyện làm việc nhóm của chúng ta và câu chuyện multiThread có gì giống nhau?
Trước tiên, chúng đều có thể thực hiện multiTask (xử lý nhiều tác vụ cùng 1 lúc). Làm việc nhóm rất khó, multi threading cũng vậy. Làm sao để các thành viên phối hợp vs nhau làm việc nhịp nhàng, sẽ cần phải có những quy tắc và 1 bộ phận phân phối task trung tâm. Trong IOS SDK có 1 API thực hiện nhiệm vụ đó chính là Grand Central Dispatch (trung tâm phân phối tác vụ). Về cơ bản, code của chúng ta sau khi viết sẽ được compile thành machine code (ngôn ngữ máy), ở đó chúng ta sẽ được đóng gói thành các gói, mỗi gói chứa các list instruction (dạng assembly code). Và GCD sẽ có nhiệm vụ phân phát các gói này lên các queue (hàng đợi), và từ các queue này các gói instruction sẽ được đẩy lên các thread (luồng làm việc của CPU), ở đây CPU sẽ có nhiệm vụ hiểu các instruction và decode thành các bit 0,1 và xử lý dãy các bit đó. Làm việc nhóm cũng vậy, sẽ phải có 1 người đứng đầu có nhiệm vụ phân công công việc cho các thành viên. Cách thức GCD hoạt động như thế nào, và cách ứng dụng để tối ưu hoá thời gian giải quyết các bài toán có độ phức tạp của thuật toán lớn. Do phần này quá dài, nên mình sẽ trình bày tiếp vào bài viết sau. Cảm ơn mọi người đã đọc bài viết của mình.
All rights reserved