Python có thể được sử dụng để lập trình song song không?

Việc tìm kiếm mức thuế cao của đồng hồ đã kết thúc với những hạn chế về thể chất; . Hơn nữa, có một vấn đề quan trọng khác. thị trường máy tính xách tay đã tăng tốc vào những năm 90. Vì vậy, điều cực kỳ quan trọng là phải có bộ xử lý có thể làm cho pin của những thiết bị này tồn tại đủ lâu khi không có phích cắm. Một số công nghệ và họ bộ xử lý từ các nhà sản xuất khác nhau đã ra đời. Đối với máy chủ và máy tính lớn, Intel® xứng đáng được nêu bật với dòng sản phẩm Core®, cho phép đánh lừa hệ điều hành bằng cách mô phỏng sự tồn tại của nhiều bộ xử lý mặc dù chỉ có một chip vật lý

Trong dòng Core®, bộ xử lý có những thay đổi nghiêm trọng bên trong và các thành phần nổi bật được gọi là lõi , có ALU và bộ nhớ đệm riêng L2 and L3, among other elements to carry out instructions. Those cores, also known as bộ xử lý logic , cho phép chúng tôi thực thi song song các phần khác nhau của cùng một chương trình hoặc thậm chí các chương trình khác nhau cùng một lúc. Lõi tuổi cho phép sử dụng ít năng lượng hơn với khả năng xử lý điện năng vượt trội so với các lõi tiền nhiệm. Khi các lõi hoạt động song song, mô phỏng các bộ xử lý độc lập, chúng ta có thể có chip đa lõi và xung nhịp kém hơn, nhờ đó có được hiệu năng vượt trội so với chip đơn lõi. .

Tất nhiên, quá nhiều sự tiến hóa đã thay đổi cách chúng ta tiếp cận thiết kế phần mềm. Ngày nay, chúng ta phải nghĩ đến tính song song để thiết kế các hệ thống sử dụng hợp lý tài nguyên mà không lãng phí chúng, từ đó mang lại trải nghiệm tốt hơn cho người dùng và tiết kiệm năng lượng không chỉ ở máy tính cá nhân mà còn ở các trung tâm xử lý. Hơn bao giờ hết, lập trình song song là cuộc sống hàng ngày của các nhà phát triển và dường như nó sẽ không bao giờ quay trở lại

Chương này bao gồm các chủ đề sau

  • Tại sao sử dụng lập trình song song?

  • Giới thiệu các dạng song song phổ biến

  • Giao tiếp trong lập trình song song

  • Xác định các vấn đề lập trình song song

  • Khám phá các công cụ lập trình của Python

  • Chăm sóc Python Khóa phiên dịch toàn cầu [ GIL]

 

Tại sao sử dụng lập trình song song?

Vì các hệ thống máy tính đã phát triển, chúng đã bắt đầu cung cấp các cơ chế cho phép chúng tôi chạy song song các phần độc lập của một chương trình cụ thể với nhau, do đó nâng cao phản hồi và hiệu suất chung. Hơn nữa, chúng ta có thể dễ dàng xác minh rằng các máy được trang bị nhiều bộ xử lý hơn và những máy này có nhiều lõi hơn. Vì vậy, tại sao không tận dụng lợi thế của kiến ​​trúc này?

Lập trình song song là một thực tế trong mọi bối cảnh phát triển hệ thống, từ điện thoại thông minh và máy tính bảng, đến điện toán nặng trong các trung tâm nghiên cứu. Cơ sở vững chắc trong lập trình song song sẽ cho phép nhà phát triển tối ưu hóa hiệu suất của ứng dụng. Điều này giúp nâng cao trải nghiệm người dùng cũng như tiêu thụ tài nguyên máy tính, do đó chiếm ít thời gian xử lý hơn để hoàn thành các tác vụ phức tạp

Như một ví dụ về tính song song, chúng ta hãy hình dung một kịch bản trong đó một ứng dụng, trong số các tác vụ khác, chọn thông tin từ cơ sở dữ liệu và cơ sở dữ liệu này có kích thước đáng kể. Cũng hãy xem xét, ứng dụng là tuần tự, trong đó các tác vụ phải được chạy lần lượt theo trình tự hợp lý. Khi người dùng yêu cầu dữ liệu, phần còn lại của hệ thống sẽ bị chặn cho đến khi kết thúc việc trả lại dữ liệu. Tuy nhiên, bằng cách sử dụng lập trình song song, chúng tôi sẽ được phép tạo một công nhân mới sẽ tìm kiếm thông tin trong cơ sở dữ liệu này mà không chặn các chức năng khác trong ứng dụng, do đó nâng cao việc sử dụng nó

 

Khám phá các hình thức song song phổ biến

Có một sự nhầm lẫn nhất định khi chúng tôi cố gắng xác định các dạng chính của hệ thống song song. Người ta thường tìm thấy các trích dẫn trên các hệ thống song song và đồng thời như thể cả hai đều có nghĩa giống nhau. Tuy nhiên, có sự khác biệt nhỏ giữa chúng

Trong lập trình đồng thời, chúng ta có một kịch bản trong đó một chương trình gửi một số công nhân và những công nhân này tranh chấp để sử dụng CPU để chạy một tác vụ. Giai đoạn xảy ra tranh chấp được kiểm soát bởi bộ lập lịch CPU , có chức năng xác định nhân viên nào thích hợp sử dụng tài nguyên tại một thời điểm cụ thể. Trong hầu hết các trường hợp, bộ lập lịch CPU chạy nhiệm vụ cào các quy trình nhanh đến mức chúng ta có thể có ấn tượng về giả song song . Do đó, lập trình đồng thời là một sự trừu tượng hóa từ lập trình song song.

Ghi chú

Các hệ thống đồng thời tranh chấp trên cùng một CPU để chạy các tác vụ

Sơ đồ sau đây cho thấy sơ đồ chương trình đồng thời

Sơ đồ lập trình đồng thời

Lập trình song song có thể được định nghĩa là một cách tiếp cận trong đó dữ liệu chương trình tạo ra các công nhân để chạy các tác vụ cụ thể đồng thời trong môi trường đa lõi mà không cần . CPU.

Ghi chú

Các hệ thống song song chạy các tác vụ đồng thời

Hình dưới đây cho thấy khái niệm về hệ thống song song

Sơ đồ lập trình song song

Lập trình phân tán hướng đến khả năng chia sẻ quá trình xử lý bằng cách trao đổi dữ liệu thông qua thông báo giữa các máy [nút] của máy tính, được tách biệt về mặt vật lý.

Lập trình phân tán ngày càng trở nên phổ biến vì nhiều lý do;

  • Khả năng chịu lỗi . Khi hệ thống được phân cấp, chúng tôi có thể phân phối quá trình xử lý cho các máy khác nhau trong mạng và do đó thực hiện bảo trì riêng cho các máy cụ thể mà không ảnh hưởng đến hoạt động của toàn bộ hệ thống.

  • Khả năng mở rộng theo chiều ngang . Chúng ta có thể tăng khả năng xử lý trong các hệ thống phân tán nói chung. Chúng tôi có thể liên kết thiết bị mới mà không cần hủy bỏ các ứng dụng đang được thực thi. Có thể nói rằng nó rẻ hơn và đơn giản hơn so với khả năng mở rộng theo chiều dọc.

  • Điện toán đám mây . Với việc giảm chi phí phần cứng, chúng tôi cần sự phát triển của loại hình kinh doanh này, nơi chúng tôi có thể có được các công viên máy khổng lồ hoạt động theo cách hợp tác và chạy các chương trình một cách minh bạch cho người dùng của họ.

Ghi chú

Các hệ thống phân tán chạy các tác vụ trong các nút được phân tách về mặt vật lý

Hình dưới đây cho thấy sơ đồ hệ thống phân tán

Sơ đồ lập trình phân tán

 

Giao tiếp trong lập trình song song

Trong lập trình song song, các công nhân được cử đi thực hiện một nhiệm vụ thường cần thiết lập giao tiếp để có thể hợp tác giải quyết vấn đề. Trong hầu hết các trường hợp, giao tiếp này được thiết lập theo cách mà dữ liệu có thể được trao đổi giữa các công nhân. Có hai hình thức giao tiếp được biết đến rộng rãi hơn khi nói đến lập trình song song. trạng thái chia sẻ và truyền tin nhắn. Trong các phần sau, một mô tả ngắn gọn về cả hai sẽ được trình bày

Hiểu trạng thái chia sẻ

Một hình thức giao tiếp phổ biến nhất giữa những người lao động là trạng thái chia sẻ . Trạng thái chia sẻ có vẻ dễ sử dụng nhưng có nhiều cạm bẫy vì thao tác không hợp lệ được thực hiện đối với tài nguyên được chia sẻ bởi một trong các quy trình sẽ ảnh hưởng đến tất cả các quy trình khác, do đó tạo ra kết quả xấu. Nó cũng khiến chương trình không thể được phân phối giữa nhiều máy vì những lý do rõ ràng.

Để minh họa điều này, chúng ta sẽ sử dụng một trường hợp thực tế. Giả sử bạn là khách hàng của một ngân hàng cụ thể và ngân hàng này chỉ có một nhân viên thu ngân. Khi bạn đến ngân hàng, bạn phải xếp hàng và chờ cơ hội của mình. Khi đã xếp hàng, bạn nhận thấy rằng mỗi lần chỉ có một khách hàng có thể sử dụng nhân viên thu ngân và nhân viên thu ngân sẽ không thể phục vụ đồng thời hai khách hàng mà không có khả năng mắc lỗi. Điện toán cung cấp phương tiện để truy cập dữ liệu theo cách được kiểm soát và có một số kỹ thuật, chẳng hạn như mutex .

Mutex có thể hiểu là một biến quy trình đặc biệt cho biết mức độ sẵn sàng truy xuất dữ liệu. Đó là, trong ví dụ thực tế của chúng tôi, khách hàng có một số và tại một thời điểm cụ thể, số này sẽ được kích hoạt và nhân viên thu ngân sẽ dành riêng cho khách hàng này. Kết thúc quy trình, khách hàng này sẽ miễn phí thu ngân cho khách hàng tiếp theo, v.v.

Ghi chú

Có những trường hợp dữ liệu có giá trị không đổi trong một biến khi chương trình đang chạy và dữ liệu được chia sẻ chỉ cho mục đích đọc. Vì vậy, kiểm soát truy cập là không cần thiết vì nó sẽ không bao giờ gây ra các vấn đề về tính toàn vẹn

Hiểu tin nhắn đi qua

Chuyển tin nhắn được sử dụng khi chúng tôi muốn tránh sự cố kiểm soát truy cập dữ liệu và đồng bộ hóa bắt nguồn từ trạng thái chia sẻ. Truyền tin nhắn bao gồm một cơ chế trao đổi tin nhắn trong các quy trình đang chạy. Nó được sử dụng rất phổ biến bất cứ khi nào chúng ta đang phát triển các chương trình với kiến ​​trúc phân tán, trong đó việc trao đổi thông báo trong mạng mà chúng được đặt là cần thiết. Ví dụ, các ngôn ngữ như Erlang sử dụng mô hình này để triển khai giao tiếp trong kiến ​​trúc song song của nó. Khi dữ liệu được sao chép tại mỗi lần trao đổi tin nhắn, không thể xảy ra sự cố về tính đồng thời của quyền truy cập. Mặc dù việc sử dụng bộ nhớ dường như cao hơn ở trạng thái bộ nhớ dùng chung, nhưng có những lợi thế khi sử dụng mô hình này. Chúng như sau.

  • Không có sự đồng thời truy cập dữ liệu

  • Tin nhắn có thể được trao đổi cục bộ [các quy trình khác nhau] hoặc trong môi trường phân tán

  • Điều này làm cho các vấn đề về khả năng mở rộng ít xảy ra hơn và cho phép khả năng tương tác của các hệ thống khác nhau

  • Nói chung, nó rất dễ bảo trì theo các lập trình viên

 

Xác định các vấn đề lập trình song song

Có những vấn đề kinh điển mà các anh hùng bàn phím dũng cảm có thể gặp phải khi chiến đấu ở những vùng đất nơi những bóng ma lập trình song song trú ngụ. Nhiều vấn đề trong số này xảy ra thường xuyên hơn khi các lập trình viên thiếu kinh nghiệm sử dụng công nhân kết hợp với trạng thái chia sẻ. Một số vấn đề này sẽ được mô tả trong các phần sau

Bế tắc

Bế tắc là tình huống trong đó hai hoặc nhiều công nhân chờ đợi vô thời hạn để giải phóng tài nguyên, tài nguyên này bị chặn bởi một công nhân cùng nhóm vì một số lý do. Để hiểu rõ hơn, chúng ta sẽ sử dụng một trường hợp thực tế khác. Hãy tưởng tượng ngân hàng có lối vào có cửa xoay. Khách hàng A đi sang một bên, điều này sẽ cho phép anh ta vào ngân hàng, trong khi khách hàng B cố gắng ra khỏi ngân hàng bằng cách sử dụng phía lối vào của cánh cửa xoay này để cả hai khách hàng sẽ bị mắc kẹt khi buộc cửa nhưng không đi đến đâu. Tình huống này sẽ rất vui nhộn trong cuộc sống thực nhưng lại là bi kịch trong lập trình

Ghi chú

Bế tắc là hiện tượng các tiến trình chờ một điều kiện để giải phóng các tác vụ của chúng, nhưng điều kiện này sẽ không bao giờ xảy ra.

chết đói

Đây là sự cố có các tác dụng phụ do đánh cắp không công bằng một hoặc nhiều quy trình làm mất nhiều thời gian hơn để chạy một tác vụ. Hãy tưởng tượng một nhóm các quy trình, A, chạy các tác vụ nặng và có quyền ưu tiên bộ xử lý dữ liệu. Bây giờ, hãy tưởng tượng rằng một quy trình A có mức ưu tiên cao liên tục tiêu thụ CPU, trong khi quy trình B có mức ưu tiên thấp hơn không bao giờ có cơ hội. Do đó, có thể nói rằng tiến trình B đang bị bỏ đói đối với các chu kỳ CPU.

Ghi chú

Chết đói là do chính sách xếp hạng quy trình được điều chỉnh không tốt.

điều kiện cuộc đua

Khi kết quả của một quy trình phụ thuộc vào một chuỗi các sự kiện và chuỗi này bị phá vỡ do thiếu cơ chế đồng bộ hóa, chúng ta phải đối mặt với các điều kiện cạnh tranh. Chúng là kết quả của các vấn đề cực kỳ khó lọc trong các hệ thống lớn hơn. Chẳng hạn, một cặp vợ chồng có một tài khoản chung; . Bảng sau đây cho thấy trường hợp thông thường, trong đó có các cơ chế bảo vệ và chuỗi các sự kiện dự kiến, cũng như kết quả

Chồng

Vợ

Số dư tài khoản [đô la]

  

100

Đọc số dư

 

100

Thêm 20

 

100

kết thúc hoạt động

 

120

 

Đọc số dư

120

 

Rút 10

120

 

kết thúc hoạt động

110

Trình bày các hoạt động nướng mà không có cơ hội xảy ra điều kiện cuộc đua

Trong bảng dưới đây, tình huống có vấn đề được trình bày. Giả sử tài khoản không có cơ chế đồng bộ và thứ tự thao tác không như mong muốn

Chồng

Vợ

Số dư tài khoản [đô la]

  

100

Đọc số dư

 

100

Rút 100

 

100

 

Đọc số dư

100

 

Rút 10

100

Kết thúc thao tác cập nhật số dư

 

0

 

Kết thúc thao tác cập nhật số dư

90

Tương tự để cân bằng vấn đề trong tài khoản chung và điều kiện cuộc đua

Có sự không nhất quán đáng chú ý trong kết quả cuối cùng do thiếu đồng bộ hóa ngoài dự kiến ​​trong chuỗi hoạt động. Một trong những đặc điểm của lập trình song song là tính không xác định . Không thể biết trước thời điểm hai công nhân sẽ chạy, hoặc thậm chí ai trong số họ sẽ chạy trước. Do đó, cơ chế đồng bộ hóa là rất cần thiết.

Ghi chú

Tính không xác định nếu được kết hợp với việc thiếu cơ chế đồng bộ hóa, có thể dẫn đến các vấn đề về tình trạng cuộc đua.

 

Khám phá các công cụ lập trình song song của Python

Ngôn ngữ Python do Guido Van Rossum tạo ra, là một ngôn ngữ đa mô hình, đa mục đích. Nó đã được chấp nhận rộng rãi trên toàn thế giới do tính đơn giản mạnh mẽ và bảo trì dễ dàng. Nó còn được gọi là ngôn ngữ có pin đi kèm. Có một loạt các mô-đun để làm cho việc sử dụng nó mượt mà hơn. Trong lập trình song song, Python có các mô-đun bên trong và bên ngoài giúp đơn giản hóa việc triển khai. Công việc này dựa trên Python 3. x.

Mô-đun luồng Python

Mô-đun Python luồng cung cấp một lớp trừu tượng cho mô-đun _thread, là mô-đun cấp thấp hơn. Nó cung cấp các chức năng giúp lập trình viên trong nhiệm vụ khó khăn là phát triển các hệ thống song song dựa trên các luồng. Có thể tìm thấy các bài báo chính thức của mô-đun phân luồng tại.

Mô-đun đa xử lý Python

Mô-đun đa xử lý nhằm mục đích cung cấp một API đơn giản để sử dụng song song dựa trên các quy trình. Mô-đun này tương tự như mô-đun luồng, giúp đơn giản hóa việc luân phiên giữa các quy trình mà không gặp khó khăn lớn. Cách tiếp cận dựa trên các quy trình rất phổ biến trong cộng đồng người dùng Python vì nó là một giải pháp thay thế cho việc trả lời các câu hỏi về việc sử dụng Luồng giới hạn CPU . Có thể tìm thấy các tài liệu chính thức của mô-đun đa xử lý tại. GIL present in Python. The multiprocessing module's official papers can be found at .

Mô-đun Python song song

Mô-đun Pythong song song là mô-đun bên ngoài và cung cấp API phong phú để tạo các hệ thống song song và phân tán sử dụng phương pháp tiếp cận quy trình. Mô-đun này hứa hẹn sẽ nhẹ, dễ cài đặt và tích hợp với các chương trình Python khác. Mô-đun Python song song có thể được tìm thấy tại http. //trăn song song. com. Trong số một số tính năng, chúng tôi có thể nhấn mạnh những điều sau đây.

  • Tự động phát hiện cấu hình tối ưu

  • Thực tế là một số worker process có thể được thay đổi trong thời gian chạy

  • Cân bằng tải động

  • khả năng chịu lỗi

  • Tự động phát hiện tài nguyên máy tính

Cần tây – một hàng đợi nhiệm vụ phân tán

Cần tây là một mô-đun Python tuyệt vời được sử dụng để tạo các hệ thống phân tán và có tài liệu tuyệt vời. Nó sử dụng ít nhất ba loại phương pháp khác nhau để chạy các tác vụ ở dạng đồng thời— đa xử lý , EventletEventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. Eventlet . Tuy nhiên, công việc này sẽ tập trung nỗ lực vào việc sử dụng phương pháp đa xử lý. Ngoài ra, liên kết giữa cái này với cái khác là một vấn đề cấu hình và nó vẫn là một nghiên cứu để người đọc có thể thiết lập so sánh với các thử nghiệm của riêng mình. , and Gevent. This work will, however, concentrate efforts on the use of the multiprocessing approach. Also, the link between one and another is a configuration issue, and it remains as a study so that the reader is able to establish comparisons with his/her own experiments.

Có thể lấy mô-đun Celery trên trang dự án chính thức tại http. // dự án cần tây. tổ chức

 

Chăm sóc Python GIL

GIL là một cơ chế được sử dụng để triển khai Python tiêu chuẩn, được gọi là CPython , để tránh . Sự tồn tại của GIL trong Python là một lý do để thảo luận sôi nổi giữa những người dùng ngôn ngữ này. GIL được chọn để bảo vệ bộ nhớ trong được sử dụng bởi trình thông dịch CPython, vốn không triển khai các cơ chế đồng bộ hóa để truy cập đồng thời theo luồng. Trong mọi trường hợp, GIL dẫn đến sự cố khi chúng tôi quyết định sử dụng các luồng và các luồng này có xu hướng bị ràng buộc bởi CPU. Ví dụ: that are executed simultaneously by different threads. The existence of GIL in Python is a reason for fiery discussion amongst users of this language. GIL was chosen to protect the internal memory used by the CPython interpreter, which does not implement mechanisms of synchronization for the concurrent access by threads. In any case, GIL results in a problem when we decide to use threads, and these tend to be CPU-bound. Chủ đề I/O nằm ngoài phạm vi của GIL. Có thể cơ chế này mang lại nhiều lợi ích cho sự phát triển của Python hơn là gây hại cho nó. Rõ ràng là chúng ta không thể chỉ xem xét tốc độ như một đối số duy nhất để xác định liệu một thứ có tốt hay không.

Có những trường hợp trong đó cách tiếp cận sử dụng các quy trình cho các tác vụ liên quan đến việc truyền thông báo mang lại mối quan hệ tốt hơn giữa khả năng bảo trì, khả năng mở rộng và hiệu suất. Mặc dù vậy, có những trường hợp sẽ có nhu cầu thực sự về chủ đề, điều này sẽ được khuất phục trước GIL. Trong những trường hợp này, điều có thể làm là viết các đoạn mã đó dưới dạng phần mở rộng bằng ngôn ngữ C và nhúng chúng vào chương trình Python. Vì vậy, có những lựa chọn thay thế; . Vì vậy, có đến câu hỏi. GIL, nói chung, là một nhân vật phản diện? . Để biết thêm thông tin chi tiết về dự án, truy cập http. //pypy. tổ chức/tmdonate. html. PyPy team is working on an STM implementation in order to remove GIL from Python. For more details about the project, visit //pypy.org/tmdonate.html.

 

Tóm lược

Trong chương này, chúng ta đã tìm hiểu một số khái niệm về lập trình song song, và tìm hiểu về một số mô hình, ưu và nhược điểm của chúng. Một số vấn đề và vấn đề tiềm ẩn khi nghĩ về song song đã được trình bày trong phần giải thích ngắn gọn. Chúng tôi cũng đã có phần giới thiệu ngắn về một số mô-đun Python, tích hợp sẵn và bên ngoài, giúp cuộc sống của nhà phát triển dễ dàng hơn khi xây dựng các hệ thống song song

Ngôn ngữ lập trình nào là tốt nhất để xử lý song song?

Các ngôn ngữ lập trình, chẳng hạn như C và C++ , đã phát triển để giúp sử dụng nhiều luồng và xử lý sự phức tạp này dễ dàng hơn. Cả C và C++ hiện bao gồm các thư viện luồng. C ++ hiện đại, đặc biệt, đã đi một chặng đường dài để lập trình song song dễ dàng hơn. C ++ 11 bao gồm một thư viện luồng tiêu chuẩn.

Python có song song hóa các vòng lặp không?

Bạn có thể chuyển đổi các vòng lặp for lồng nhau để thực thi đồng thời hoặc song song trong Python bằng cách sử dụng nhóm luồng hoặc nhóm quy trình , tùy thuộc vào loại tác vụ đang được thực thi.

Python có hỗ trợ lập trình song song không?

Python cung cấp cơ chế cho cả đồng thời và song song , mỗi cơ chế có cú pháp và trường hợp sử dụng riêng.

Chủ Đề