成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何創新Python虛擬機線程

開發 后端
Python虛擬機在編程領域的占有率一直處于生生日上的地步,根據最新的數據表明,Python語言目前排名為全球的第六。

一些開發人員明確指示Python虛擬機創建新的線程,Python就能意識到用戶需要多線程的支持,如果沒有前期的這些支持,不知道Python虛擬機能不能順利的發展下去。

Python虛擬機的thread module所提供的接口中,一定不能少的肯定是創建線程的接口,倘若沒有這個接口,生活還有什么意義呢J?在上面的thread1.py中,我們正是通過其提供的start_new_thread創建了一個嶄新的線程。好,我們就進入這個start_new_ thread,看看Python是如何進行創世紀的工作的:

  1. [thread_nt.h]  
  2.  
  3. int PyThread_acquire_lock(PyThread_type_lock aLock, int waitflag)  
  4.  
  5. {  
  6.  
  7.     int success ;  
  8.  
  9.     success = aLock && EnterNonRecursiveMutex((PNRMUTEX) aLock, (waitflag 
  10.  
  11.        == 1 ? INFINITE : 0)) == WAIT_OBJECT_0 ;  
  12.  
  13.     return success;  
  14.  
  15. }  
  16.  
  17. DWORD EnterNonRecursiveMutex(PNRMUTEX mutex, BOOL wait)  
  18.  
  19. {  
  20.  
  21.     /* Assume that the thread waits successfully */  
  22.  
  23.     DWORD ret;  
  24.  
  25.     /* InterlockedIncrement(&mutex->owned) == 0 means that no thread  
  26.  
  27.         currently owns the mutex */  
  28.  
  29.     if (!wait)  
  30.  
  31.     {  
  32.  
  33.         if (InterlockedCompareExchange((PVOID *)&mutex->owned, (PVOID)0,  
  34.  
  35.               (PVOID)-1) != (PVOID)-1)  
  36.  
  37.             return WAIT_TIMEOUT ;  
  38.  
  39.         ret = WAIT_OBJECT_0 ;  
  40.  
  41.     }  
  42.  
  43.     else  
  44.  
  45.         ret = InterlockedIncrement(&mutex->owned) ?  
  46.  
  47.             /* Some thread owns the mutex, let's wait... */  
  48.  
  49.             WaitForSingleObject(mutex->hevent, INFINITE) : WAIT_OBJECT_0 ;  
  50.  
  51.     mutex->thread_id = GetCurrentThreadId() ; /* We own it */  
  52.  
  53.     return ret ;  
  54.  
  55. }  

在代碼清單中,我們注意到boot->interp中保存了Python的PyInter- preterState對象,這個對象中攜帶了Python的module pool這樣的全局信息,Python中所有的thread都會共享這些全局信息。

關于代碼清單15-1的[2]處所示的多線程環境的初始化動作,有一點需要特別說明,當Python啟動時,是并不支持多線程的。換句話說,Python中支持多線程的數據結構以及GIL都是沒有創建的,Python之所以有這種行為是因為大多數的Python程序都不需要多線程的支持。

假如一個簡單地統計詞頻的Python腳本中居然出現了多線程,面對這樣的代碼,我們一定都會抓狂的J。
對多線程的支持并非是沒有代價的。最簡單的一點,如果激活多線程機制,而執行的Python程序中并沒有多線程,那么在100條指令之后,Python虛擬機同樣會激活線程的調度。

而如果不激活多線程,Python虛擬機則不用做這些無用功。所以Python選擇了讓用戶激活多線程機制的策略。在Python虛擬機啟動時,多線程機制并沒有被激活,它只支持單線程,一旦用戶調用thread.start_new_thread。

明確指示Python虛擬機創建新的線程,Python就能意識到用戶需要多線程的支持,這個時候,Python虛擬機會自動建立多線程機制需要的數據結構、環境以及那個至關重要的GIL。

在這里,我們終于看到了Python中多線程機制的平臺相關性,在Python25\Python目錄下,有一大批thread_***.h這樣的文件。這些文件中,包裝了不同操作系統的原生線程,并通過統一的接口暴露給Python,比如這里的PyThread_allocate_lock就是這樣一個接口。

我們這里的thread_nt.h中包裝的是Win32平臺的原生thread,在本章中后面的代碼剖析中,還會有大量與平臺相關的代碼,我們都以Win32平臺為例。在PyThread_allocate_lock中,與PyEval_InitThreads非常類似的,它會檢查一個initialized的變量,如果說GIL指示著Python的多線程環境是否已經建立。

那么這個initialized變量就指示著為了使用底層平臺所提供的原生thread,必須的初始化動作是否完成。這些必須的初始化動作通常都是底層操作系統所提供的API,不同的操作系統可能需要不同的初始化動作。

【編輯推薦】

  1. 有關Python系統文件進行介紹指導
  2. 如何正確的使用Python函數
  3. Python 構建工具進行詳細介紹分析
  4. PythonAndroid淺析Python優勢所在
  5. 如何使用Python模塊解析配置文件?
責任編輯:chenqingxiang 來源: CSDN
相關推薦

2010-12-23 14:05:12

虛擬機

2012-04-10 10:29:29

2017-11-14 16:43:13

Java虛擬機線程

2022-08-14 09:11:13

Kubernetes容器云原生

2012-05-18 10:22:23

2010-07-26 09:02:38

2013-07-17 09:32:58

2009-06-12 16:15:42

死鎖Java虛擬機

2009-06-29 19:36:07

虛擬機備份虛擬環境

2012-04-27 09:29:57

虛擬化虛擬機

2018-07-10 15:10:50

OpenStack虛擬機metadata

2013-11-19 14:05:08

VDP虛擬機

2013-04-07 09:52:40

Ubuntu虛擬機虛擬化軟件

2009-10-13 15:00:36

物理機虛擬機網絡安全

2010-02-24 10:39:28

Python虛擬機

2009-08-14 13:30:44

配置linux虛擬機s

2011-09-02 18:45:28

2010-12-27 14:11:55

虛擬機配置CPU

2022-10-27 08:13:51

管理虛擬機Cockpit

2010-03-29 16:00:19

Nginx 虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av喷水 | 欧美在线视频a | 999久久久久久久久6666 | 国产成人免费视频 | h视频在线观看免费 | 成人国产免费视频 | 北条麻妃99精品青青久久主播 | 精品无码久久久久久国产 | 激情 婷婷| 国产一区二区免费在线 | 国产视频1 | 中文字幕高清av | 免费观看的av | 狠狠ri| 亚洲日日 | 久久精品久久久久久 | 亚洲导航深夜福利涩涩屋 | 成人不卡视频 | 欧美精品一二三 | 精品久久久久一区 | 精品一区二区三区在线观看 | 欧美一级做性受免费大片免费 | 国产精品综合色区在线观看 | 中文字幕免费在线 | 久久鲁视频| 中文字幕国产视频 | 日韩三级在线观看 | 亚洲人人 | 超碰在线97国产 | 毛片视频网站 | 91精品久久久久久久久中文字幕 | 91.xxx.高清在线 | 国产精品地址 | 影视先锋av资源噜噜 | 日韩高清在线观看 | 亚洲成人av| 欧美日韩不卡 | 免费观看一级特黄欧美大片 | 日日碰狠狠躁久久躁96avv | 国产在线小视频 | 亚洲精品一区二三区不卡 |