Chủ đề và các loại của nó trong python là gì?

Một luồng là một luồng tuần tự duy nhất thực hiện các tác vụ của một tiến trình nên nó còn được gọi là luồng thực thi hoặc luồng điều khiển. Có một cách thực hiện luồng bên trong quy trình của bất kỳ hệ điều hành nào. Ngoài ra, có thể có nhiều hơn một luồng bên trong một quy trình. Mỗi luồng của cùng một quy trình sử dụng một bộ đếm chương trình riêng biệt và một chồng các bản ghi kích hoạt và các khối điều khiển. Chủ đề thường được gọi là một quá trình nhẹ

Chủ đề và các loại của nó trong python là gì?

Quá trình có thể được chia thành rất nhiều chủ đề. Ví dụ: trong trình duyệt, nhiều tab có thể được xem dưới dạng luồng. MS Word sử dụng nhiều luồng - định dạng văn bản từ một luồng, xử lý đầu vào từ một luồng khác, v.v.

cần chủ đề

  • Mất ít thời gian hơn để tạo một luồng mới trong một quy trình hiện có so với tạo một quy trình mới
  • Các luồng có thể chia sẻ dữ liệu chung, chúng không cần sử dụng giao tiếp giữa các quá trình
  • Chuyển đổi ngữ cảnh nhanh hơn khi làm việc với các luồng
  • Mất ít thời gian hơn để kết thúc một luồng hơn một quá trình

Các loại chủ đề

Trong hệ điều hành, có hai loại luồng

  1. Chủ đề cấp hạt nhân
  2. Chủ đề cấp người dùng

Chủ đề cấp người dùng

Hệ điều hành không nhận ra luồng cấp người dùng. Chủ đề người dùng có thể dễ dàng thực hiện và nó được thực hiện bởi người dùng. Nếu người dùng thực hiện thao tác chặn chuỗi cấp người dùng, toàn bộ quá trình sẽ bị chặn. Luồng cấp kernel không biết gì về luồng cấp người dùng. Luồng cấp nhân quản lý các luồng cấp người dùng như thể chúng là các quy trình đơn luồng?ví dụ. Chủ đề Java, chủ đề POSIX, v.v.

Ưu điểm của chủ đề cấp người dùng

  1. Các luồng người dùng có thể được thực hiện dễ dàng hơn luồng nhân
  2. Các luồng ở cấp độ người dùng có thể được áp dụng cho các loại hệ điều hành không hỗ trợ các luồng ở cấp độ nhân
  3. Nó nhanh hơn và hiệu quả
  4. Thời gian chuyển đổi ngữ cảnh ngắn hơn các luồng cấp nhân
  5. Nó không yêu cầu sửa đổi hệ điều hành
  6. Biểu diễn chủ đề cấp người dùng rất đơn giản. Các khối điều khiển thanh ghi, PC, ngăn xếp và luồng nhỏ được lưu trữ trong không gian địa chỉ của quy trình cấp người dùng
  7. Thật đơn giản để tạo, chuyển đổi và đồng bộ hóa các luồng mà không cần sự can thiệp của quy trình

Nhược điểm của chủ đề cấp người dùng

  1. Các luồng cấp người dùng thiếu sự phối hợp giữa luồng và nhân
  2. Nếu một chuỗi gây ra lỗi trang, toàn bộ quá trình sẽ bị chặn
Chủ đề và các loại của nó trong python là gì?

Chủ đề cấp hạt nhân

Luồng nhân nhận ra hệ điều hành. Có một khối điều khiển luồng và khối điều khiển tiến trình trong hệ thống cho mỗi luồng và xử lý trong luồng cấp nhân. Luồng cấp nhân được thực hiện bởi hệ điều hành. Nhân biết về tất cả các luồng và quản lý chúng. Chuỗi cấp nhân cung cấp lệnh gọi hệ thống để tạo và quản lý các chuỗi từ không gian người dùng. Việc triển khai kernel thread khó hơn user thread. Thời gian chuyển đổi ngữ cảnh dài hơn trong chuỗi nhân. Nếu một luồng nhân thực hiện thao tác chặn, quá trình thực thi luồng Banky có thể tiếp tục. Thí dụ. cửa sổ năng lượng mặt trời

Chạy nhiều luồng tương tự như chạy đồng thời nhiều chương trình khác nhau, nhưng có các lợi ích sau –

  • Nhiều luồng trong một quy trình chia sẻ cùng một không gian dữ liệu với luồng chính và do đó có thể chia sẻ thông tin hoặc giao tiếp với nhau dễ dàng hơn nếu chúng là các quy trình riêng biệt

  • Các luồng đôi khi được gọi là các quy trình trọng lượng nhẹ và chúng không yêu cầu nhiều bộ nhớ;

Một luồng có phần mở đầu, trình tự thực hiện và phần kết luận. Nó có một con trỏ lệnh theo dõi vị trí trong ngữ cảnh của nó hiện đang chạy

  • Nó có thể được làm trống trước (bị gián đoạn)

  • Nó có thể tạm thời bị treo (còn được gọi là ngủ) trong khi các luồng khác đang chạy - điều này được gọi là năng suất

Bắt đầu một chủ đề mới

Để sinh ra một luồng khác, bạn cần gọi phương thức sau có sẵn trong mô-đun luồng -

thread.start_new_thread ( function, args[, kwargs] )

Cuộc gọi phương thức này cho phép một cách nhanh chóng và hiệu quả để tạo các luồng mới trong cả Linux và Windows

Cuộc gọi phương thức trả về ngay lập tức và luồng con bắt đầu và gọi hàm với danh sách các đối số đã truyền. Khi chức năng trở lại, luồng kết thúc

Ở đây, args là một bộ đối số; . kwargs là một từ điển tùy chọn của các đối số từ khóa

Thí dụ

#!/usr/bin/python

import thread
import time

# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )

# Create two threads as follows
try:
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

Mặc dù nó rất hiệu quả đối với luồng cấp thấp, nhưng mô-đun luồng rất hạn chế so với mô-đun luồng mới hơn

Mô-đun luồng

Mô-đun luồng mới hơn có trong Python 2. 4 cung cấp hỗ trợ cấp cao, mạnh mẽ hơn cho các luồng so với mô-đun luồng đã thảo luận trong phần trước

Mô-đun luồng hiển thị tất cả các phương thức của mô-đun luồng và cung cấp một số phương thức bổ sung -

  • xâu chuỗi. activeCount() - Trả về số đối tượng luồng đang hoạt động

  • xâu chuỗi. currentThread() − Trả về số lượng đối tượng luồng trong điều khiển luồng của người gọi

  • xâu chuỗi. enumerate() - Trả về danh sách tất cả các đối tượng luồng hiện đang hoạt động

Ngoài các phương thức, mô-đun luồng có lớp Thread thực hiện phân luồng. Các phương thức được cung cấp bởi lớp Thread như sau -

  • run() - Phương thức run() là điểm bắt đầu cho một luồng

  • start() − Phương thức start() bắt đầu một luồng bằng cách gọi phương thức run

  • tham gia ([thời gian]) - Tham gia () chờ các luồng kết thúc

  • isAlive() − Phương thức isAlive() kiểm tra xem một luồng có còn đang thực thi hay không

  • getName() − Phương thức getName() trả về tên của một luồng

  • setName() − Phương thức setName() đặt tên của một luồng

Tạo chủ đề bằng cách sử dụng mô-đun luồng

Để triển khai một luồng mới bằng mô-đun luồng, bạn phải thực hiện như sau -

  • Định nghĩa một lớp con mới của lớp Thread

  • Ghi đè phương thức __init__(self [,args]) để thêm các đối số bổ sung

  • Sau đó, ghi đè phương thức run(self [,args]) để thực hiện những gì luồng nên làm khi bắt đầu

Một khi bạn đã tạo lớp con Thread mới, bạn có thể tạo một thể hiện của nó và sau đó bắt đầu một luồng mới bằng cách gọi phương thức start(), từ đó gọi phương thức run()

Thí dụ

#!/usr/bin/python

import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      print_time(self.name, 5, self.counter)
      print "Exiting " + self.name

def print_time(threadName, counter, delay):
   while counter:
      if exitFlag:
         threadName.exit()
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

print "Exiting Main Thread"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

Đồng bộ chủ đề

Mô-đun luồng được cung cấp cùng với Python bao gồm một cơ chế khóa dễ thực hiện cho phép bạn đồng bộ hóa các luồng. Một khóa mới được tạo bằng cách gọi phương thức Lock(), trả về khóa mới

Phương thức thu được (chặn) của đối tượng khóa mới được sử dụng để buộc các luồng chạy đồng bộ. Tham số chặn tùy chọn cho phép bạn kiểm soát xem chuỗi có chờ để lấy khóa hay không

Nếu chặn được đặt thành 0, luồng sẽ trả về ngay lập tức với giá trị 0 nếu không lấy được khóa và bằng 1 nếu lấy được khóa. Nếu chặn được đặt thành 1, luồng sẽ chặn và đợi khóa được giải phóng

Phương thức release() của đối tượng khóa mới được sử dụng để giải phóng khóa khi không còn cần thiết

Thí dụ

#!/usr/bin/python

import threading
import time

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      # Get lock to synchronize threads
      threadLock.acquire()
      print_time(self.name, self.counter, 3)
      # Free lock to release next thread
      threadLock.release()

def print_time(threadName, delay, counter):
   while counter:
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

threadLock = threading.Lock()
threads = []

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

# Add threads to thread list
threads.append(thread1)
threads.append(thread2)

# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread

Hàng đợi ưu tiên đa luồng

Mô-đun Hàng đợi cho phép bạn tạo một đối tượng hàng đợi mới có thể chứa một số mục cụ thể. Có các phương pháp sau để kiểm soát Hàng đợi -

Chủ đề là gì và các loại của nó?

Các loại chủ đề

Chủ đề trong Python là gì?

Chủ đề là gì? . Điều này có nghĩa là chương trình của bạn sẽ có hai việc xảy ra cùng một lúc. Nhưng đối với hầu hết các triển khai Python 3, các luồng khác nhau không thực sự thực thi cùng một lúc. họ chỉ xuất hiện để. a separate flow of execution. This means that your program will have two things happening at once. But for most Python 3 implementations the different threads do not actually execute at the same time: they merely appear to.

3 loại chủ đề cơ bản là gì?

Có ba sê-ri ren tiêu chuẩn trong hệ thống ren vít Thống nhất rất quan trọng đối với ốc vít. UNC (thô), UNF (tinh) và 8-UN (8 luồng) .

Có bao nhiêu luồng trong Python?

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.