Một bài viết gần đây về sự phát triển threading của Apple đã khơi mào một cuộc thảo luận cộng đồng bất ngờ về nguồn gốc thực sự của computer threading. Trong khi bài viết tập trung vào các hệ thống Mac từ năm 1984 trở đi, những người đam mê công nghệ nhanh chóng chỉ ra rằng các khái niệm threading thực sự đã xuất hiện sớm hơn nhiều thập kỷ so với những gì hầu hết mọi người nhận ra.
Những Người Tiên Phong Threading Thực Sự
Cuộc thảo luận tiết lộ rằng UNIVAC 1108 EXEC 8 , được phát hành vào năm 1966, có lẽ là hệ điều hành đầu tiên triển khai những gì chúng ta hiện gọi là threads. Những triển khai sớm này, được gọi là activities, bao gồm các tính năng tinh vi mà sẽ không xuất hiện trong các hệ thống chính thống trong nhiều năm. Hệ thống hỗ trợ nhiều threads trong cùng một address space, có các atomic operations được hỗ trợ bởi phần cứng, và thậm chí bao gồm async I/O với callbacks - tất cả đều là những khái niệm cách mạng cho thập niên 1960.
Điều đặc biệt thú vị là cách những đổi mới sớm này phần lớn bị lãng quên vào thời điểm các nhà phát triển Unix và Linux bắt đầu triển khai threading trong những năm 1980 và 1990. Khoảng trống kiến thức này dẫn đến việc lặp lại nhiều sai lầm thiết kế đã được giải quyết từ nhiều thập kỷ trước đó.
Các Cột Mốc Quan Trọng Của Threading:
- 1966: UNIVAC 1108 EXEC 8 giới thiệu "activities" (threads đầu tiên)
- 1985: Apple Switcher cho phép chuyển đổi ứng dụng (hợp tác)
- 1985: Commodore Amiga triển khai đa nhiệm preemptive
- 1987: Apple MultiFinder mang đến đa nhiệm hợp tác
- 2009: Apple giới thiệu Grand Central Dispatch (GCD)
Những Hiểu Lầm Về Threading Hiện Đại
Cuộc thảo luận cộng đồng cũng làm nổi bật sự nhầm lẫn phổ biến về thuật ngữ threading. Nhiều người trộn lẫn processes và threads, hoặc không hiểu sự khác biệt giữa cooperative và preemptive multitasking. Cuộc trò chuyện tiết lộ rằng ngay cả các chuyên gia kỹ thuật đôi khi cũng gặp khó khăn với những phân biệt này, đặc biệt khi các hệ điều hành khác nhau sử dụng những cách tiếp cận khác nhau.
Vào thời điểm UNIX / Linux có threads, không ai biết rằng nó đã được thực hiện hai mười năm trước đó, và chúng ta phải trải qua một số lượng lớn các sai lầm thiết kế, chủ yếu liên quan đến signals.
Sự Phân Biệt Giữa Threading và Process:
- Threads: Chia sẻ không gian bộ nhớ, được lập lịch bởi hệ điều hành hoặc ứng dụng
- Processes: Có không gian bộ nhớ riêng biệt, luôn được lập lịch bởi hệ điều hành
- Activities: Thuật ngữ của UNIVAC năm 1966 dành cho threads, bao gồm các thao tác nguyên tử được hỗ trợ bởi phần cứng
Sự Gia Nhập Muộn Màng Của Apple Vào Threading
Trong khi hành trình của Apple từ single-tasking đến Grand Central Dispatch hiện đại rất ấn tượng, cộng đồng lưu ý rằng Apple thực sự khá muộn trong cuộc chơi threading. Commodore Amiga đã có preemptive multitasking trên một bộ xử lý duy nhất từ năm 1985, cùng năm Apple phát hành tiện ích Switcher cơ bản chỉ có thể chạy một ứng dụng tại một thời điểm.
Cuộc thảo luận cho thấy rằng việc chỉ nhìn vào lịch sử threading của Apple cung cấp một cái nhìn hạn chế về cách các công nghệ này thực sự phát triển. Các hệ thống như NT , VMS , hoặc Solaris sẽ cung cấp những ví dụ tốt hơn về sự tiến hóa threading, vì chúng không bị ràng buộc bởi những lựa chọn thiết kế sớm của Apple .
Cuộc trò chuyện cộng đồng này cho thấy cách mà ngay cả những bài viết được nghiên cứu kỹ lưỡng cũng có thể bỏ lỡ bối cảnh lịch sử quan trọng. Câu chuyện thực sự của threading cũ hơn và phức tạp hơn nhiều so với những gì hầu hết các nhà phát triển hiện đại nhận ra, với những đổi mới từ thập niên 1960 vẫn ảnh hưởng đến các hệ thống ngày nay.
Tham khảo: A brief history of threads and threading