Từ năm 1970 đến khoảng 2002 bộ xử lý tăng gấp đôi tốc độ cứ sau 18 tháng. Vì vậy, là một lập trình viên, tất cả những gì bạn phải làm là chờ đợi và chương trình của bạn sẽ diễn ra nhanh hơn. Vấn đề là khoảng năm 2002 các quy tắc đã thay đổi. Bây giờ họ không tạo ra các bộ xử lý nhanh lớn hơn, họ đang tạo ra các bộ xử lý chậm nhỏ hơn mà đưa chúng ra theo nhóm. Máy tính tôi đang làm việc hiện có 4 lõi và Chips có tới 8 lõi (và 4 luồng trên mỗi lõi) tồn tại. Không lâu nữa chúng ta sẽ có chip với nhiều lõi hơn.
Vì vậy, nếu bạn viết một chương trình hoàn toàn không đồng thời, bạn sẽ thấy rằng bạn đang sử dụng 1 lõi hoặc luồng, nhưng phần còn lại của CPU đang ngồi đó không làm gì cả. Vì vậy, nếu bạn có 16 nhân 1 sẽ chạy chương trình của bạn và 15 nhân khác đang ngồi ở đó!
Vấn đề với sự tương tranh là nó không mang tính quyết định. Điều đó có nghĩa là bạn không biết chính xác thứ tự các luồng khác nhau sẽ làm gì. Các lập trình viên truyền thống đã cố gắng giải quyết điều này bằng cách sử dụng các khóa và tương tự. Điều này đã dẫn đến một LOT đau đớn. Có một số dạng trạng thái có thể thay đổi mà nhiều hơn một chủ đề có thể truy cập tự do thường là một công thức cho nỗi đau và heisnebugs!
Cuối xu hướng là chuyển sang các ngôn ngữ chức năng kiểm soát chặt chẽ trạng thái có thể thay đổi. Có hai cách cơ bản mà các ngôn ngữ chức năng xử lý đồng thời. Đầu tiên là bằng cách sử dụng tin nhắn đi qua. Điều này được thể hiện tốt nhất bởi Erlang. Trong Erlang nói chung không có trạng thái Chia sẻ giữa các quy trình. Họ liên lạc không phải bằng cách chia sẻ bộ nhớ mà là tin nhắn qua của tôi. Điều này sẽ có ý nghĩa với bạn khi chúng tôi đang làm điều đó ngay bây giờ. Tôi đang gửi thông tin này cho bạn bằng cách gửi tin nhắn cho bạn chứ không phải bạn nhớ nó ra khỏi não tôi! Bằng cách chuyển sang tin nhắn vượt qua hầu hết các lỗi khóa chỉ cần biến mất. Ngoài ra, tin nhắn có thể được truyền qua mạng cũng như trong một nút.
Phương pháp khác là STM, viết tắt của Bộ nhớ phiên mã phần mềm, Điều này hiện diện trong clojure và Haskell (và các phương thức khác). Trong bộ nhớ STM được chia sẻ nhưng thay đổi chỉ có thể được thực hiện thông qua một giao dịch. Vì những người trong Cơ sở dữ liệu đã tìm ra tất cả những thứ này vào những năm 1970, khá dễ dàng để đảm bảo rằng chúng tôi hiểu đúng.
Trên thực tế tôi đã đơn giản hóa một chút, Clojure và Haskell đều có thể thực hiện chuyển tin nhắn và Erlang có thể thực hiện STM.
Tuyên bố miễn trừ trách nhiệm Tôi là tác giả của Lập trình dịch vụ web với Erlang , sẽ được phát hành sớm trong vài tuần tới.