Python có thể chạy nhiều luồng không?

Để làm như vậy sẽ tạo và chạy nhiều luồng trong chương trình của chúng tôi và sẽ cần sử dụng Python 3 và thư viện luồng

Vậy luồng là gì và đa luồng là gì?
Trong Python, luồng là một quy trình/luồng thực thi riêng biệt. Chạy nhiều luồng trong một chương trình cho phép nhiều tác vụ tiến hành đồng thời.

Hãy điều tra một ứng dụng đa luồng bằng chương trình máy tính cơ bản được sử dụng để tìm các số nguyên tố rất lớn

Trình tìm số nguyên tố

Trong ví dụ này, chúng ta sẽ tạo một lớp gọi là PrimeNumberThread xuất phát từ lớp Thread của thư viện luồng

Lớp/luồng này sẽ được sử dụng để tìm các số nguyên tố rất lớn từ bất kỳ vị trí bắt đầu nào [e. g. Kiểm tra bất kỳ số nào lớn hơn 100.000.000.000.000 lần lượt để xem chúng có phải là số nguyên tố hay không]

Sau đó, chúng tôi sẽ chạy ba luồng đồng thời, mỗi luồng bắt đầu với một vị trí bắt đầu khác nhau. e. g

  • Đề 1 sẽ tra cứu các số nguyên tố, bắt đầu từ số 100.000.000.000.000
  • Đề 2 sẽ tra cứu các số nguyên tố, bắt đầu từ số 300.000.000.000.000
  • Đề 3 sẽ tra cứu các số nguyên tố, bắt đầu từ số 500.000.000.000.000

Ngay khi chuỗi tìm thấy một số nguyên tố, nó sẽ hiển thị nó trên màn hình. Cả ba luồng sẽ hoạt động đồng thời. Bạn có thể chạy đoạn mã sau để xem đầu ra được tạo bởi cả ba luồng…

Chương trình trên là phần giới thiệu rất ngắn gọn về ý nghĩa của việc chạy nhiều luồng trong một chương trình máy tính. Có rất nhiều khái niệm khác liên quan đến đa luồng và bạn có thể tìm hiểu thêm về các khái niệm này bằng cách đọc qua hướng dẫn này về đa luồng với Python

Bài viết này trình bày những kiến ​​thức cơ bản về đa luồng trong ngôn ngữ lập trình Python. Cũng giống như đa xử lý, đa luồng là một cách để đạt được đa nhiệm. Trong đa luồng, khái niệm luồng được sử dụng. Trước tiên chúng ta hãy hiểu khái niệm về luồng trong kiến ​​trúc máy tính

Chủ đề

Trong điện toán, một quy trình là một thể hiện của một chương trình máy tính đang được thực thi. Bất kỳ quy trình nào cũng có 3 thành phần cơ bản

  • Một chương trình thực thi
  • Dữ liệu liên quan mà chương trình cần [biến, không gian làm việc, bộ đệm, v.v. ]
  • Bối cảnh thực thi của chương trình [Trạng thái của tiến trình]

Một luồng là một thực thể trong một quy trình có thể được lên lịch để thực hiện. Ngoài ra, nó là đơn vị xử lý nhỏ nhất có thể được thực hiện trong HĐH [Hệ điều hành]. Nói một cách đơn giản, một luồng là một chuỗi các hướng dẫn như vậy trong một chương trình có thể được thực thi độc lập với mã khác. Để đơn giản, bạn có thể giả sử rằng một luồng chỉ đơn giản là một tập hợp con của một quy trình. Một luồng chứa tất cả thông tin này trong Khối điều khiển luồng [TCB]

  • Số nhận dạng chủ đề. Id duy nhất [TID] được gán cho mọi chủ đề mới
  • Con trỏ ngăn xếp. Trỏ tới ngăn xếp của luồng trong tiến trình. Ngăn xếp chứa các biến cục bộ trong phạm vi của luồng
  • bộ đếm chương trình. một thanh ghi lưu địa chỉ của lệnh hiện đang được thực thi bởi luồng
  • Trạng thái chủ đề. có thể đang chạy, sẵn sàng, chờ đợi, bắt đầu hoặc hoàn thành
  • Bộ đăng ký của chủ đề. thanh ghi được gán cho luồng để tính toán
  • Con trỏ tiến trình cha. Một con trỏ tới khối Điều khiển quy trình [PCB] của quy trình mà luồng tồn tại trên đó

Xem xét sơ đồ bên dưới để hiểu mối quan hệ giữa quy trình và luồng của nó

đa luồng. Nhiều luồng có thể tồn tại trong một quy trình trong đó

  • Mỗi luồng chứa bộ thanh ghi riêng và các biến cục bộ [được lưu trữ trong ngăn xếp]
  • Tất cả các luồng của một quy trình chia sẻ các biến toàn cục [được lưu trữ trong heap] và mã chương trình

Xem xét sơ đồ bên dưới để hiểu cách tồn tại nhiều luồng trong bộ nhớ

Đa luồng được định nghĩa là khả năng bộ xử lý thực thi đồng thời nhiều luồng

Trong một CPU lõi đơn, đơn giản, nó đạt được bằng cách chuyển đổi thường xuyên giữa các luồng. Điều này được gọi là chuyển ngữ cảnh. Trong chuyển đổi ngữ cảnh, trạng thái của một luồng được lưu và trạng thái của một luồng khác được tải bất cứ khi nào có bất kỳ ngắt nào [do I/O hoặc được đặt thủ công] diễn ra. Chuyển đổi ngữ cảnh diễn ra thường xuyên đến mức tất cả các luồng dường như đang chạy song song [điều này được gọi là đa nhiệm]

Xem xét sơ đồ bên dưới, trong đó một quy trình chứa hai luồng đang hoạt động.  

Đa luồng trong Python

Trong Python, mô-đun luồng cung cấp một API rất đơn giản và trực quan để sinh ra nhiều luồng trong một chương trình. Chúng ta hãy xem xét một ví dụ đơn giản sử dụng mô-đun phân luồng.  

Python3




import threading
72

import threading
73

import threading
0

import threading
1
import threading
2

 

 

import threading
3
import threading
4

import threading
5
import threading
6

import threading
5
import threading
8
import threading
9
import threading
00
import threading
01
import threading
02
import threading
03
import threading
04
import threading
05
import threading
04
import threading
07

 

 

import threading
3
import threading
09

import threading
5
import threading
11

import threading
5
import threading
8
import threading
9
import threading
15
import threading
01
import threading
02
import threading
03
import threading
04
import threading
07

 

 

import threading
11
import threading
12____313
import threading
13
import threading
15
import threading
16

import threading
5
import threading
18

import threading
5
import threading
00
import threading
13
import threading
02
import threading
13
import threading
04
import threading
13
import threading
9
import threading
07
import threading
08

import threading
5
import threading
00
import threading
13
import threading
02
import threading
13
import threading
04
import threading
13
import threading
9
import threading
07
import threading
08

 

import threading
5
import threading
00

import threading
5
import threading
02

import threading
5
import threading
04

import threading
5
import threading
06

 

import threading
5
import threading
08

import threading
5
import threading
720

import threading
5
import threading
722

import threading
5
import threading
724

 

import threading
5
import threading
726

import threading
5
import threading
8____09____1730
import threading
731

import threading
6

Hãy để chúng tôi cố gắng hiểu đoạn mã trên

  • Để nhập mô-đun luồng, chúng tôi làm
import threading
  • Để tạo một luồng mới, chúng ta tạo một đối tượng thuộc lớp Thread. Phải mất các đối số sau
    • Mục tiêu. chức năng được thực thi bởi luồng
    • tranh luận. các đối số được chuyển đến hàm mục tiêu
  • Để bắt đầu một tiểu trình, chúng ta sử dụng phương thức bắt đầu của lớp Thread
import threading
0
  • Khi các luồng bắt đầu, chương trình hiện tại [bạn có thể coi nó giống như một luồng chính] cũng tiếp tục thực thi. Để dừng thực thi chương trình hiện tại cho đến khi hoàn thành một luồng, chúng tôi sử dụng phương thức nối
import threading
1
  • Do đó, chương trình hiện tại trước tiên sẽ đợi hoàn thành t1 và sau đó là t2. Khi chúng kết thúc, các câu lệnh còn lại của chương trình hiện tại được thực hiện

Xem xét sơ đồ bên dưới để hiểu rõ hơn về cách thức hoạt động của chương trình trên.  

Hãy xem xét chương trình python được cung cấp bên dưới, trong đó chúng tôi in tên luồng và quy trình tương ứng cho từng tác vụ.  

Python3




import threading
72

import threading
73

import threading
1
import threading
2

import threading
1
import threading
737

 

import threading
3
import threading
739

import threading
5
import threading
8
import threading
02
import threading
03
import threading
04
import threading
02
import threading
06

import threading
5
import threading
8
import threading
09
import threading
10
import threading
11
import threading
03
import threading
13
import threading
02
import threading
15

 

import threading
3
import threading
17

import threading
5
import threading
8
import threading
02
import threading
21
import threading
04
import threading
02
import threading
06

import threading
5
import threading
8
import threading
09
import threading
10
import threading
11
import threading
21
import threading
13
import threading
02
import threading
15

 

import threading
11
import threading
12____313
import threading
13
import threading
38

 

import threading
5
import threading
40

import threading
5
import threading
8
import threading
09
import threading
10
import threading
45
import threading
02
import threading
15

 

import threading
5
import threading
49

import threading
5
import threading
8
import threading
52
import threading
02
import threading
06

 

import threading
5
import threading
56

import threading
5
import threading
00
import threading
13
import threading
02
import threading
13
import threading
62
import threading
13
import threading
64
import threading
731

import threading
5
import threading
00
import threading
13
import threading
02
import threading
13
import threading
71
import threading
13
import threading
73
import threading
74

 

import threading
5
import threading
76

import threading
5
import threading
02

import threading
5
import threading
06

 

import threading
5
import threading
82

import threading
5
import threading
720

import threading
5
import threading
724

import threading
1

Hãy để chúng tôi cố gắng hiểu đoạn mã trên

  • chúng tôi sử dụng hệ điều hành. hàm getpid[] để lấy ID của quy trình hiện tại
import threading
0
  • Vì rõ ràng từ đầu ra, ID tiến trình vẫn giữ nguyên cho tất cả các luồng
  • Chúng tôi sử dụng luồng. hàm main_thread[] để lấy đối tượng luồng chính. Trong điều kiện bình thường, luồng chính là luồng mà trình thông dịch Python được bắt đầu. thuộc tính tên của đối tượng luồng được sử dụng để lấy tên của luồng
import threading
0
  • Chúng tôi sử dụng luồng. current_thread[] để lấy đối tượng luồng hiện tại
import threading
0

Sơ đồ đưa ra dưới đây làm rõ khái niệm trên

Vì vậy, đây là phần giới thiệu ngắn gọn về đa luồng trong Python. Bài viết tiếp theo trong loạt bài này đề cập đến việc đồng bộ hóa giữa nhiều luồng. Đa luồng trong Python. Bộ 2 [Đồng bộ hóa]

Bài viết này được đóng góp bởi Nikhil Kumar. Nếu bạn thích GeeksforGeeks và muốn đóng góp, bạn cũng có thể viết một bài báo bằng cách sử dụng write. chuyên viên máy tính. org hoặc gửi bài viết của bạn tới review-team@geeksforgeeks. tổ chức. Xem bài viết của bạn xuất hiện trên trang chính của GeeksforGeeks và trợ giúp các Geeks khác

Vui lòng viết bình luận nếu bạn thấy bất cứ điều gì không chính xác hoặc bạn muốn chia sẻ thêm thông tin về chủ đề thảo luận ở trên

Python có thể chạy bao nhiêu luồng?

Nói chung, Python chỉ sử dụng một luồng để thực thi tập hợp các câu lệnh đã viết. Điều này có nghĩa là trong python, chỉ có một luồng sẽ được thực thi tại một thời điểm.

Các luồng Python có thể chạy trên nhiều lõi không?

Do các hạn chế do GIL đặt ra trong Python, các luồng không thể đạt được tính song song thực sự khi sử dụng nhiều lõi CPU. Đa xử lý không có bất kỳ hạn chế nào như vậy. Lập lịch quy trình được xử lý bởi HĐH, trong khi lập lịch luồng được thực hiện bởi trình thông dịch Python

Python xử lý nhiều luồng như thế nào?

Để sử dụng đa luồng, chúng ta cần nhập mô-đun luồng trong Chương trình Python . Phương thức start[] được sử dụng để bắt đầu hoạt động của một luồng. Và nó chỉ gọi một lần cho mỗi luồng để quá trình thực thi luồng có thể bắt đầu.

Python có chạy đa lõi không?

Đa xử lý trong Python cho phép máy tính sử dụng nhiều lõi của CPU để chạy các tác vụ/quy trình song song . Đa xử lý cho phép máy tính sử dụng nhiều lõi của CPU để chạy các tác vụ/quy trình song song.

Chủ Đề