TWI515655B - 在常式內切換執行緒之方法、系統及電腦可讀取記憶體 - Google Patents

在常式內切換執行緒之方法、系統及電腦可讀取記憶體 Download PDF

Info

Publication number
TWI515655B
TWI515655B TW103108713A TW103108713A TWI515655B TW I515655 B TWI515655 B TW I515655B TW 103108713 A TW103108713 A TW 103108713A TW 103108713 A TW103108713 A TW 103108713A TW I515655 B TWI515655 B TW I515655B
Authority
TW
Taiwan
Prior art keywords
thread
routine
continuation
switching
return
Prior art date
Application number
TW103108713A
Other languages
English (en)
Other versions
TW201426546A (zh
Inventor
卡利那克茲斯多福
Original Assignee
微軟公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 微軟公司 filed Critical 微軟公司
Publication of TW201426546A publication Critical patent/TW201426546A/zh
Application granted granted Critical
Publication of TWI515655B publication Critical patent/TWI515655B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Executing Machine-Instructions (AREA)
  • User Interface Of Digital Computer (AREA)

Description

在常式內切換執行緒之方法、系統及電腦可讀取記憶體
本發明是有關於一種在常式之內切換執行緒的技術。
開發人員使用一個或多個軟體開發程式編寫的軟體應用程式。開發人員編寫原始碼以用來使軟體應用程式執行欲達成的功能。具有一使用者介面的軟體應用程式,可令一終端用戶能夠與完整應用程式的圖形化選單及選項進行互動,以實現欲達成的結果。原始碼一般是由開發人員在應用程式的開發過程中編寫的,以用來處理使用者輸入,然後執行適當的工作以回應使用者輸入。
例如,在一完整的客戶服務應用程式的情況下,終端用戶可以選擇一搜尋操作,以搜尋一已知客戶名稱的所有客戶記錄。該軟體應用程式將處理該搜尋,存取一資料庫以搜尋符合資料,並回傳該搜尋結果至該終端用戶。如果這種搜索是在該軟體應用程式的該使用者介面執行緒中執行,依 不同的處理狀態可能會或可能不會顯示一沙漏。例如,若該應用程式完全被封鎖,則可能不會顯示一沙漏。在這樣一個封鎖狀況下,在螢幕上可能都會顯示一個黑色長方形或其他指標,以指示該使用者介面執行緒係是封鎖的。在此封鎖期間,使用者無法使用應用程式做任何其它事,因為該使用者介面執行緒是完全被該搜尋工作所佔據。
隨著技術的進步,現在已可應用多執行緒應用程式和多處理器電腦。換句話說,多執行緒的執行可以在同一時間開始,若可能的話,有時亦可在多處理器上執行。例如,一個執行緒可用於處理使用者輸入,而另一個執行緒可用於執行背景工作(worker)的任務。為了寫出多執行緒應用程式,開發入員需面臨編寫複雜的原始碼的挑戰,以創造和管理該些多執行緒。此原始碼通常需要包含在不同執行緒之間傳遞參數的功能,而不同執行緒係在許多不同的地方非同步地執行。開發人員往往編寫單獨不同的執行緒,以供須要不同的執行緒來執行的工作。由於多執行緒的執行工作的複雜性,開發人員多以不正確或效率低的方式來使用多執行緒,或者甚至完全不使用多執行緒,而僅期望使用者對於不頻繁的使用者介面的封鎖應不會介意。
習知已揭露在常式中切換執行緒的各式技術。一控制器常式接收到來自一原始常式的一要求,以執行一共常式(coroutine),並且在一初始執行緒中執行該共常式。當該共常式依據一返回敘述而離開時,該控制器常式會接到從該 共常式回傳的一回應。當該共常式被執行一接續時間時,會指示該共常式應被執行於哪一接續執行緒中。該控制器常式在該接續執行緒中執行該共常式在先前已指定的該接續時間。數個返回敘述可包含在該共常式中,且這些步驟可被重覆數次以切換該些執行緒。
在一實施例中,圖形使用者介面邏輯和背景工作執行緒邏輯的執行,可被一起整合於一個單一共常式中。程式碼的執行係開始於包含在一共常式內的初始邏輯,藉由在一第一執行緒中執行該初始邏輯的執行以接收使用者輸入訊號。接著,該使用者輸入訊號會被接收。於通過該共常式一部分後即返回,以切換成一第二執行緒,其中該第二執行緒相較於第一執行緒為一不同的執行緒。程式碼的執行會在該第二執行緒中的該共常式繼續進行,以回應該使用者輸入訊號而執行工作。
此發明概述係以一簡化形式來介紹可供選擇的概念,下文將再進一步於實施方式中敘述本發明。此發明概述並非用以識別本發明所要求保護標的的主要或必要特徵,亦非用以限定本發明之要求保護的標的範圍。
10‧‧‧執行緒切換系統
12‧‧‧起始常式
14‧‧‧控制器常式
16‧‧‧共常式
100‧‧‧運算裝置
102‧‧‧處理器單元
104‧‧‧系統記憶體
106‧‧‧電腦裝置
108‧‧‧可卸除式儲存器
110‧‧‧不可卸除式儲存器
111‧‧‧輸出裝置
112‧‧‧輸入裝置
114‧‧‧其他通訊連結
115‧‧‧其他電腦/應用程式
200‧‧‧執行緒切換控制器應用程式
204‧‧‧程式邏輯
206‧‧‧從起始常式接收要求以執行一共常式的邏輯
208‧‧‧於初始執行緒中執行共常式的邏輯
210‧‧‧當共常式返回時從共常式接收回應的邏輯
212‧‧‧當共常式返回時在一被指定的接續執行緒中執行該共常式的邏輯
214‧‧‧將該圖形使用者介面邏輯和背景工作執行緒邏輯一起整合於一單一常式的邏輯
220‧‧‧其他執行該應用程式的邏輯
240‧‧‧流程圖
242‧‧‧步驟
244‧‧‧步驟
246‧‧‧步驟
248‧‧‧步驟
250‧‧‧決定點
252‧‧‧步驟
270‧‧‧流程圖
272‧‧‧步驟
274‧‧‧步驟
276‧‧‧步驟
278‧‧‧步驟
290‧‧‧流程圖
292‧‧‧步驟
294‧‧‧步驟
296‧‧‧步驟
298‧‧‧步驟
310‧‧‧原始碼
312‧‧‧OnClick事件
314‧‧‧執行方法
320‧‧‧原始碼
322‧‧‧控制器常式
324‧‧‧迴圈
330‧‧‧原始碼
332‧‧‧betterButton1_Clicked常式
334‧‧‧返回敘述
336‧‧‧圖形使用者介面邏輯
338‧‧‧返回敘述
340‧‧‧背景工作執行緒邏輯
342‧‧‧返回敘述
344‧‧‧圖形使用者介面邏輯
第1圖是本發明執行緒切換系統之一實施例的方塊圖;第2圖是本發明電腦系統之一實施例的方塊圖;第3圖是本發明應用一執行緒切換控制器應用程式之一實施例的方塊圖; 第4圖是一實施例之有關於利用一控制器常式管理在不同執行緒中之一共常式的執行之步驟流程圖;第5圖是一實施例之有關於通過一常式部份後即切換執行緒的步驟流程圖;第6圖是一實施例之有關於將圖形使用者介面邏輯和背景工作執行緒邏輯一起整合於一個單一共常式的步驟流程圖;第7圖繪示出有關一種形式的使用者介面之如何開啟一控制器常式的一OnClick事件的原始碼範例之示意圖;第8圖繪示出用於管理在數個執行緒中一共常式之執行的一控制器常式的原始碼範例之示意圖;以及第9圖繪示出用於將圖形使用者介面邏輯和背景工作執行緒邏輯整合於一單一共常式的一共常式的原始碼範例之示意圖。
在此所述的技術和技藝係關於在一個單一常式內的數個執行緒之間可作切換,但該些技術和技藝亦可達成在此所述之外的其他目的。在一實施例中,一個或多個此處所述的技術可被應用作為軟體研發程式中的特徵,諸如:美商微軟的MICROSOFT® VISUAL STUDIO®,或從為了軟體應用程式而撰寫原始碼的其他形式的程式或服務,或從用來製作或管理多執行緒的軟體應用程式的其他形式的程式或服務。
在一實施例中,共常式可應用此處所述的部分的或全部的技術和技藝,使程式碼以常用的語法依序編寫並能傳 遞參數。但其亦可允許在多個執行緒之間切換以執行單一常式中的邏輯。換言之,此述的技術和技藝提供了將不同執行緒中的邏輯應用一起整合於一個同一常式的機制。此處所稱的「共常式」一詞是指包含一函數、程序、或包含合併於該共常式中的一組程式碼語句的另一常式,及允許複數個可被暫停且能在之後能繼續進行的切入點,其中在該共常式的一特定的啟始記錄的存續期間無關於在控制進入或離開該共常式的時候。
第1圖是本發明之一執行緒切換系統10之一實施例的方塊圖。在一實施例中,執行緒切換系統10包含一起始常式12、一控制器常式14、以及一共常式16。此處所稱的「常式」一詞是指包含一程式組件,其具有一函數、程序、或其他將原始碼編組於一單元內的任何手段。一起始常式12可以是任一包含於一已知共常式中的欲執行功能的常式,如共常式16。在一實施例中,為了呼叫該共常式,該起始常式會經由一控制器常式14。每次當該共常式返回時,在藉由其所指示的一執行緒中開啟該共常式16時,該控制器常式14會反覆地呼叫該共常式16數次。此處所稱的「返回敘述」一詞是指包含一敘述語句或其他機制,用以致使一共常式在執行到該共常式之一端之前即返回。換言之,當該共常式想要在執行任何多行程式碼之前切換執行緒時,該返回敘述是用來從該常式暫時地返回,所以,一不同的執行緒才可被用來處理後續幾行的程式碼。當返回時,該共常式可藉由不同方法來指示出接續執行緒。在一實施例中,該返回敘述可包含一個 具有接續執行緒識別碼的返回參數,以指示下一個要使用的接續執行緒。亦可使用其他不同的方式以指示出該接續執行緒,如:在該共常式返回前藉由該共常式呼叫一個方法去設定該接續執行緒,或藉由設定一具有接續執行緒識別符之物件其屬性或將其設為一值,或藉由將該接續執行緒識別碼記錄於一資料庫中等方式。
該共常式16將於(一行或多行之後的)該返回敘述之後的該行程式碼(在不同的執行緒中)處重新開始,或是在其他適當的位置。該些步驟可重覆進行直到達到該共常式16的終端,或出現另一事件以使該控制器常式14停止反覆執行該共常式16及切換該些執行緒。在一實施例中,每次該共常式16被該控制器常式14重新繼續時,一個最近的從該共常式返回所指示的一最接近的接續執行緒,可用來決定使用的該執行緒。
必須注意的是在另一實施例中,該起始常式12和該控制器常式14的功能可被整合進同一個常式。在某一些實施例中,此處所稱的「常式」一詞亦可包含多個共常式。例如,當起始常式12和控制器常式14都被描述成常式時,在一些實施例中,其一或兩者可被實施成一或多共常式。這些第1圖所介紹的技術,將在第3~6圖中詳加說明,並在第7~9圖中以原始碼的範例作說明。
參見第2圖,繪示出包含一運算裝置,如運算裝置100,的一例示的電腦系統用以實施一個或多個該系統的部份。在其最基本的配置中,運算裝置100一般包含至少一個 處理器單元102和記憶體104。依照其全部配置與計算器裝置的型式,記憶體104可為揮發性的(如隨機存取記憶體)、非揮發性的(如唯讀記憶體、快閃記憶體等)或其兩者的組合。這最基本的配置係於第2圖中的虛線106所繪示。
此外,裝置100也可以具有額外的特徵、功能。例如,裝置100可具有額外的記憶體(可卸除式及/或不可卸除式),包含如磁性或光學性的碟片或膠卷帶,但並非僅限於此。該額外的記憶體係顯示於第2圖中的可卸除式記憶體108及不可卸除式記憶體110。電腦儲存媒體包含揮發性和非揮發性,可卸除式及不可卸除式媒體,應用於任一方法或技術來儲存資訊,如:電腦可讀式操作、資料結構、程式模組或其他資料。記憶體104、可卸除式記憶體108及不可卸除式記憶體110皆為電腦儲存媒體的實施例。電腦儲存媒體,包含但並非僅限於如:隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電氣式可抹除唯讀記憶體(EEPROM)、快閃記憶體、或其他記憶體技術,CD-ROM,DVD、或其他光學式記憶體,磁卡匣、磁帶、磁碟記憶體、或其他磁性記憶裝置,亦或任何一種可被電子裝置讀取的用來記錄所需資訊的媒體。
運算裝置100中包含一個或多個通訊連結114,用來使運算裝置100能和其他電腦/程式115進行溝通。運算裝置100也可以具有輸入裝置112,如鍵盤、滑鼠、筆、語音輸入裝置、觸碰輸入裝置等。亦包含輸出裝置111,如顯示器、喇叭、印表機等。這些裝置均為此領域所週知,故於此不詳加贅述。在一實施例中,運算裝置100包含一執行緒切換控 制器應用程式200。而執行緒切換控制器應用程式200將在第3圖中作進一步詳述。
參見第3圖,同時繼續配合參考第2圖,係繪示操作於運算裝置100中的一執行緒切換控制器應用程式200。執行緒切換控制器應用程式200係運算裝置100中常駐的一個應用程式。然而,應理解的是執行緒切換控制器應用程式200可選擇地或額外地具體實現成在一個或多個電腦之中的電腦可執行指令,亦或在不同於第2圖所示的其他變化形式之中。選擇地或額外地,執行緒切換控制器應用程式200的一個或多個的部份,可以是在其他電腦中的部份的系統記憶體104,及/或應用程式115,或是在電腦軟體技術領域中的任一可思及的其他不同變化形式。
執行緒切換控制器應用程式200包含程式邏輯204,係用以實現某些或全部的此處所述的技術。程式邏輯204包含用以接收一個來自該起始常式以執行一共常式206的邏輯(參照以下第4圖所述);用以在一起始執行緒208上執行該共常式的邏輯(參照以下第4圖所述);當該共常式返回210時用以接收一個來自該共常式的邏輯(參照以下第4圖所述);在當該共常式返回212時所指示的一接續執行緒上執行該共常式的邏輯(參照以下第4圖所述);用以使圖形使用者介面邏輯和背景工作執行緒邏輯一起整合進一單一常式214的邏輯(參照以下第6圖所述);以及,其他用來操作該執行緒切換控制器應用程式200的邏輯220。
接著參見第4~6圖,同時繼續配合參考第1~3圖, 係詳細說明應用一個或多個執行緒切換系統10(如第1圖)的步驟,以及/或執行緒切換控制器應用程式200(如第3圖)的步驟。在一些實施例中,第4~6圖的步驟流程係至少部分應用於運算裝置100的運算邏輯中。
第4圖是繪示出有關於利用一控制器常式以管理在不同執行緒中之一共常式執行步驟的一實施例之步驟流程圖240。一般來說,第4圖係描述一例示的行程,有關於該控制器常式呼叫該共常式數次,每一次在一執行緒上呼叫該共常式,都是當該共常式基於返回敘述所作的返回時所指定的。
當從一起始常式的一要求被接收以執行一共常式時(步驟242),該控制器常式執行該共常式於該起始執行緒中(步驟244)。在一實施例中,在用以初始化該切換至欲指定的執行緒的該共常式中的一行程式碼執行之前,其並未指定出一執行緒,故該起始執行緒僅為一軟體應用程式所使用的一個內定的執行緒。而後,該共常式係執行一些邏輯,且該控制器常式接收到從該共常式回應的一個基於一返回敘述的一回應(步驟246)。在該共常式離開時,該共常式會指示一接續執行緒識別碼以指定出哪個執行緒係應於下一次該控制器常式呼叫該共常式時被呼叫的該共常式。在一實施例中,從該共常式之該返回敘述所接收到的該回應,包含一具有該接續執行緒識別碼的參數。在其他實施例中,該控制器常式會存取一個物件內、資料庫或其他變數的數據,以作為當該共常式回覆時所指定的該接續執行緒識別碼。
然後,該控制器常式在該共常式回覆時所指定的該 執行緒中(亦即,於該接續執行緒識別碼中所指定的),執行該共常式接續的時間(步驟248)。若在該共常式到達執行終端之前,該共常式作再次的返回(亦即,因另一個返回敘述)(決定點250),則該控制器常式會接收到另一個該共常式的回應,且會有一個針對下一個接續的執行緒用於下一次呼叫時開啟該共常式的指示(步驟246)。該控制器常式會在該下一個接續的執行緒上執行該共常式(步驟248)。一旦當該共常式執行到終端(決定點250),該控制器常式即停止呼叫該共常式(步驟252)。
第5圖是繪示出有關於通過一常式部份後即切換執行緒之一實施例的步驟流程方塊圖270。該常式係開始於一執行緒(步驟272)。在一實施例中,該常式係一共常式。在另一實施例中,該常式為可被呼叫數次的任何形式的常式,並且該常式可操作以在程式碼中的先前所停止執行的點再開始被執行。在執行該常式中的一行或多行的程式碼後,該常式會碰到一返回敘述,從而使該常式僅通過部份該常式中的所有程式碼而於一點返回(步驟274)。當返回時,該常式令一接續執行緒識別碼被指示(步驟274)。有許多不同方法可令該常式將一接續執行緒識別碼被指示,如:藉由一返回敘述的一返回參數,藉由設定一物件的一屬性、範疇,或一型式以設定數值,藉由呼叫一設定數值方法,藉由將該接續執行緒識別碼寫入一資料庫,或藉由任何其他通訊方式將該接續執行緒識別碼傳達至該控制器常式。而後,該常式的執行即在該接續執行緒識別碼所指定的該執行緒上繼續進行(步驟 276)。在上一次返回前暫停下的程式碼的執行,即於該接續執行緒上繼續進行(步驟278)。
第6圖為一實施例的一步驟流程圖290,係繪示出有關於使圖形使用者介面邏輯和背景工作執行緒邏輯整合進一個單一共常式。一共常式開始於第一執行緒以接收使用者輸入訊號(步驟292)。接著,使用者輸入訊號被接收(步驟294)。該共常式於途中返回以切換成一第二執行緒(步驟296),因該第二執行緒係不同於該第一執行緒。在一實施例中,該共常式會返回係因其碰到一返回敘述。程式碼的執行係於該共常式內第二執行緒繼續進行以回應該使用者輸入訊號(步驟298)。在一實施例中,該第一執行緒係一圖形使用者介面執行緒,而該第二執行緒係一背景工作執行緒。除了圖形使用者介面執行緒和/或背景工作執行緒可進行合併之外,其他各式不同的執行緒均可進行合併。第9圖係繪示出將圖形使用者介面執行緒邏輯和背景工作執行緒邏輯一起整合於同一個常式中的原始碼範例。
接著參照第7~9圖,係以示範的原始碼來進一步詳細說明第4~6圖中的該些階段。從第7圖開始,示範的原始碼310係表示一個OnClick事件312,其係關於一種形式的使用者介面。當一終端使用者按下表格中的BetterButton按鍵,即觸發該OnClick事件312(第1圖中的起始常式12)。該OnClick事件312接著呼叫該控制器常式(即第1圖中的14),即本例中所示的執行方法314。在一實施例中,由該控制器常式所執行的該共常式的名稱,係作為一參數而從該起始常式 被發送至該控制器常式。然後,該控制器常式負責於適合的執行緒中呼叫該共常式複數次,如第8圖所示。在如第8圖所示之例示的控制器常式322,包含數行的原始碼用以處理在數個執行緒中之執行工作。共常式呼叫亦包含在一迴圈324內,以負責呼叫該共常式複數次。每次該共常式被呼叫時,該控制器常式會開啟當該共常式之先前返回所指定的該執行緒中的該共常式。
如第9圖所示,該共常式可包含設計用以在不同型式的執行緒所整合成的一單一共常式中執行的程式碼。在第9圖的原始碼範例330中,圖形使用者介面邏輯(336與344)和背景工作執行緒邏輯(340)都同樣一起被整合進一共常式中,即該範例中的betterButton1_Clicked常式332。為了在該些執行緒之間切換,即使用返回敘述(334、338及342)。在此例中,圖形使用者介面執行緒和背景工作執行緒被用以執行不同部分的工作。再者,在此例中,該返回敘述係一yield敘述(對C#程式語言來說)。每一個返回敘述(334、338及342)提示該共常式應被暫時返回,然後在返回敘述中以參數指定的該執行緒中繼續進行(比如,“ThreadRequest.UI”用於指定圖形使用者介面執行緒,或“ThreadRequest.Worker”用於指定背景工作執行緒)。當如第8圖所示之該控制器常式接收到從該共常式回傳的回應時,該共常式的執行將接著再次被該控制器常式起始,但係起始於該特定的執行緒中。
雖然本發明已以一較佳實施例揭露如上,然其並非用以限定本發明,任何熟習此技藝者,在不脫離本發明之精 神和範圍內,當可作各種之更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
例如,一熟習電腦軟體技藝者可瞭解到,本文所提及之實施例可於一或多電腦上作不同組織安排,以相較本發範例可包括較少或額外的特徵選擇。
10‧‧‧執行緒切換系統
12‧‧‧起始常式
14‧‧‧控制器常式
16‧‧‧共常式

Claims (20)

  1. 一種用於在常式內切換執行緒的方法,包含下列步驟:在一初始執行緒上執行一常式的一初始部分;識別一接續執行緒,該接續執行緒不同於該初始執行緒;處理一敘述,該敘述的處理致使該常式在該初始部分的一終點處暫時離開該常式;及在一接續執行緒上進行該常式之一接續執行,該接續執行乃執行該常式的一接續部分,該常式的該接續部分起自該初始部分的該終點。
  2. 如請求項1所述之方法,該方法進一步包含:自一起始常式接收執行該常式的一請求,其中該常式之該初始部分的執行乃回應於接收該請求之步驟而進行。
  3. 如請求項1所述之方法,該方法進一步包含:在執行該常式之該初始部分後自該常式接收一回應,其中該回應識別該接續執行緒。
  4. 如請求項3所述之方法,該方法進一步包含:執行該常式複數次直到到達該常式之一終端為止,其中該常式之各次執行係在一最近接續執行緒上所執行,該最近接續執行緒係由該常式在來自該常式之一最近回應上所指示。
  5. 如請求項3所述之方法,該方法進一步包含:以對該回應的一參數來指定該接續執行緒。
  6. 如請求項1所述之方法,該方法進一步包含:自一執行緒集區(threadpool)選取該接續執行緒。
  7. 如請求項1所述之方法,該方法進一步包含:使用該接續執行緒以促進處理圖形使用者介面邏輯。
  8. 如請求項1所述之方法,該方法進一步包含:使用該接續執行緒以促進處理背景工作執行緒邏輯。
  9. 一種電腦可讀取記憶體,該電腦可讀取儲存媒體儲存由一計算裝置可執行之指令,以致使該計算裝置進行下列操作:在一第一執行緒上處理一常式的一初始部分;在該初始部分的一終點處離開該常式,該離開操作係由一返回(return)敘述的處理所致;及在一接續執行緒上自該終點進行該常式之一接續處理,該接續執行緒不同於該第一執行緒。
  10. 如請求項9所述之電腦可讀取記憶體,該等操作進一步包含:自一執行緒集區(threadpool)中所包含之複數個候選執行緒決定該接續執行緒。
  11. 如請求項9所述之電腦可讀取記憶體,該等操作進一步包含:經由在該返回敘述中所包括之一接續執行緒識別符來識別該接續執行緒,該返回敘述係回應於處理該初始部分之該操作所提供。
  12. 如請求項9所述之電腦可讀取記憶體,該等操作進一步包含:經由回應於處理該初始部分之該操作而回傳的一參數來指定該接續執行緒。
  13. 如請求項9所述之電腦可讀取記憶體,該等操作進一步包含:將該常式實施為一共常式(coroutine)。
  14. 如請求項9所述之電腦可讀取記憶體,該等操作進一步包含:配置該第一執行緒以進行與該接續執行緒不同類型之一操作。
  15. 一種用於在常式內切換執行緒的系統,該系統包含至少一處理器,該至少一處理器耦合至至少一電腦可讀取儲存媒體,該至少一電腦可讀取儲存媒體儲存指令,該等指令係由該至少一處理器可執行以實施下列步驟:在一第一執行緒上執行對應於一常式之一初始部分的程式碼;回應於一返回(return)敘述的處理而暫時地離開該常式;及 從在該第一執行緒上該常式之該初始部分的執行切換到在一第二執行緒上該常式之一接續部分的一接續執行,該第一執行緒不同於該第二執行緒。
  16. 如請求項15所述之系統,該切換步驟進一步包含:自一執行緒集區(threadpool)選取該接續執行緒。
  17. 如請求項15所述之系統,該切換步驟進一步包含:經由包括在該返回敘述中的一參數來識別該接續執行緒,該返回敘述經提供以回應於該初始部分的執行。
  18. 如請求項15所述之系統,該切換步驟進一步包含:進行複數次執行緒切換,該等複數次執行緒切換之各者關聯於一對應返回敘述,該對應返回敘述識別一個別接續執行緒。
  19. 如請求項15所述之系統,執行對應於該常式之該初始部分的該程式碼的步驟係經進行以回應於從一起始常式接收要執行該常式的一請求。
  20. 如請求項15所述之系統,該切換步驟促進圖形使用者介面邏輯與背景工作執行緒邏輯一起整合(co-mingle)在該常式中。
TW103108713A 2007-10-25 2008-09-26 在常式內切換執行緒之方法、系統及電腦可讀取記憶體 TWI515655B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/977,593 US8589925B2 (en) 2007-10-25 2007-10-25 Techniques for switching threads within routines

Publications (2)

Publication Number Publication Date
TW201426546A TW201426546A (zh) 2014-07-01
TWI515655B true TWI515655B (zh) 2016-01-01

Family

ID=40580367

Family Applications (2)

Application Number Title Priority Date Filing Date
TW097137253A TWI446262B (zh) 2007-10-25 2008-09-26 在常式內切換執行緒之技術
TW103108713A TWI515655B (zh) 2007-10-25 2008-09-26 在常式內切換執行緒之方法、系統及電腦可讀取記憶體

Family Applications Before (1)

Application Number Title Priority Date Filing Date
TW097137253A TWI446262B (zh) 2007-10-25 2008-09-26 在常式內切換執行緒之技術

Country Status (5)

Country Link
US (3) US8589925B2 (zh)
EP (1) EP2217998B1 (zh)
JP (1) JP5315354B2 (zh)
TW (2) TWI446262B (zh)
WO (1) WO2009055494A2 (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589925B2 (en) 2007-10-25 2013-11-19 Microsoft Corporation Techniques for switching threads within routines
US8732211B2 (en) 2011-01-28 2014-05-20 International Business Machines Corporation Method, computer system, and physical computer storage medium for organizing data into data structures
CN105164638B (zh) * 2013-04-23 2019-09-27 起元科技有限公司 控制由计算系统执行的任务
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
CA2959389A1 (en) 2014-09-02 2016-03-10 Ab Initio Technology Llc Compilation of graph-based program specifications with automated clustering of graph components based on the identification of particular data port connections
SG11201701605XA (en) * 2014-09-02 2017-03-30 Ab Initio Technology Llc Controlling data processing tasks
US9933918B2 (en) 2014-09-02 2018-04-03 Ab Initio Technology Llc Specifying control and data connections in graph-based programs
SG11201701651SA (en) 2014-09-02 2017-04-27 Ab Initio Technology Llc Managing execution state of components in a graph-based program specification for controlling their associated tasks
US9760406B2 (en) 2014-09-02 2017-09-12 Ab Initio Technology Llc Controlling data processing tasks
US9552223B2 (en) * 2014-09-30 2017-01-24 International Business Machines Corporation Post-return asynchronous code execution
CN105447138A (zh) * 2015-11-20 2016-03-30 北京京东尚科信息技术有限公司 用于服务器的方法及系统
US10761714B2 (en) * 2015-11-23 2020-09-01 Google Llc Recognizing gestures and updating display by coordinator
CN108089919B (zh) * 2017-12-21 2021-01-15 北京云杉世纪网络科技有限公司 一种并发处理api请求的方法及系统
US11789741B2 (en) * 2018-03-08 2023-10-17 Sap Se Determining an optimum quantity of interleaved instruction streams of defined coroutines
CN109257411B (zh) * 2018-07-31 2021-12-24 平安科技(深圳)有限公司 一种业务处理方法、调用管理系统和计算机设备
CN110247984B (zh) * 2019-06-27 2022-02-22 腾讯科技(深圳)有限公司 业务处理方法、装置及存储介质
CN113608843B (zh) * 2021-07-08 2023-08-25 广东开放大学(广东理工职业学院) 协程实现方法和系统
CN114584500B (zh) * 2022-02-25 2024-03-22 网易(杭州)网络有限公司 异步通信的测试方法、装置及电子设备

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69024753T2 (de) * 1989-10-31 1996-05-30 Hewlett Packard Co Tragbarer, Ressourcen teilender Datei-Server, der gemeinsame Routines benutzt
JPH03173938A (ja) 1989-11-30 1991-07-29 Pioneer Electron Corp トラッキングサーボ装置
JP2535631B2 (ja) * 1989-12-01 1996-09-18 富士通株式会社 コル―チン呼び出し制御方式
US5261097A (en) * 1991-03-11 1993-11-09 Digital Equipment Corporation Computer system and method for executing command scripts using multiple synchronized threads
US6598068B1 (en) * 1996-01-04 2003-07-22 Sun Microsystems, Inc. Method and apparatus for automatically managing concurrent access to a shared resource in a multi-threaded programming environment
US6480818B1 (en) * 1998-11-13 2002-11-12 Cray Inc. Debugging techniques in a multithreaded environment
US6449614B1 (en) 1999-03-25 2002-09-10 International Business Machines Corporation Interface system and method for asynchronously updating a share resource with locking facility
US7043725B1 (en) * 1999-07-09 2006-05-09 Hewlett-Packard Development Company, L.P. Two tier arrangement for threads support in a virtual machine
AU7606301A (en) 2000-09-29 2002-04-11 International Business Machines Corporation Context based view design to support client side multi-threading
US6954933B2 (en) * 2000-10-30 2005-10-11 Microsoft Corporation Method and apparatus for providing and integrating high-performance message queues in a user interface environment
US6904597B2 (en) 2001-03-30 2005-06-07 Intel Corporation Inter-thread communications between different components using double buffer
US7007244B2 (en) 2001-04-20 2006-02-28 Microsoft Corporation Method and system for displaying categorized information on a user interface
US7159215B2 (en) * 2001-06-27 2007-01-02 Sun Microsystems, Inc. Termination detection for shared-memory parallel programs
US7103887B2 (en) * 2001-06-27 2006-09-05 Sun Microsystems, Inc. Load-balancing queues employing LIFO/FIFO work stealing
US20030041139A1 (en) 2001-08-14 2003-02-27 Smartpipes, Incorporated Event management for a remote network policy management system
US7086049B2 (en) * 2002-02-26 2006-08-01 International Business Machines Corporation Background code update for embedded systems
US7587721B2 (en) * 2004-05-20 2009-09-08 Sap Ag Sharing objects in runtime systems
JP4520788B2 (ja) * 2004-07-29 2010-08-11 富士通株式会社 マルチスレッドプロセッサ
US20060048106A1 (en) * 2004-08-27 2006-03-02 International Business Machines Corporation Link-time profile-based method for reducing run-time image of executables
US8568225B2 (en) 2004-09-16 2013-10-29 Bally Gaming, Inc. User interface system and method for creating and verifying signed content
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
US7603673B2 (en) * 2004-10-28 2009-10-13 Intel Corporation Method and system for reducing context switch times
US7610579B2 (en) * 2004-12-10 2009-10-27 Microsoft Corporation Critical finalizers
US7467272B2 (en) * 2004-12-16 2008-12-16 International Business Machines Corporation Write protection of subroutine return addresses
US7784051B2 (en) * 2005-11-18 2010-08-24 Sap Ag Cooperative scheduling using coroutines and threads
US20080168247A1 (en) * 2007-01-05 2008-07-10 Seagate Technology Llc Method and apparatus for controlling access to a data storage device
US8589925B2 (en) 2007-10-25 2013-11-19 Microsoft Corporation Techniques for switching threads within routines

Also Published As

Publication number Publication date
US20140047446A1 (en) 2014-02-13
WO2009055494A2 (en) 2009-04-30
US8589925B2 (en) 2013-11-19
TW201426546A (zh) 2014-07-01
EP2217998B1 (en) 2017-02-22
EP2217998A4 (en) 2014-07-23
US10007551B2 (en) 2018-06-26
JP5315354B2 (ja) 2013-10-16
US20090113436A1 (en) 2009-04-30
TWI446262B (zh) 2014-07-21
JP2011501323A (ja) 2011-01-06
US10698726B2 (en) 2020-06-30
TW200921509A (en) 2009-05-16
WO2009055494A3 (en) 2009-07-02
EP2217998A2 (en) 2010-08-18
US20190138347A1 (en) 2019-05-09

Similar Documents

Publication Publication Date Title
TWI515655B (zh) 在常式內切換執行緒之方法、系統及電腦可讀取記憶體
US10769047B2 (en) Stepping and application state viewing between points
US7415699B2 (en) Method and apparatus for controlling execution of a child process generated by a modified parent process
US7398519B2 (en) Inheritance breakpoints for use in debugging object-oriented computer programs
US5961610A (en) Systems, methods and apparatus for generating and controlling display of medical images
US5950002A (en) Learn mode script generation in a medical imaging system
US8418148B2 (en) Thread execution analyzer
EP1643369A2 (en) System and method for selecting test case execution behaviors for reproducible test automation
US8135572B2 (en) Integrated debugger simulator
US8650551B2 (en) Transactional debugger for a transactional memory system and detecting conflicts
CN112667315A (zh) 游戏引擎编辑器启动方法、装置、电子设备和存储介质
US7865883B1 (en) Parallel and asynchronous debugger and debugging method for multi-threaded programs
KR20000018932A (ko) 게임 개발 시스템 및 그 방법
JPH08212106A (ja) システム試験支援装置及びシステム試験支援方法
CN110837467A (zh) 软件测试方法、装置以及系统
JP5374965B2 (ja) シミュレーション制御プログラム、シミュレーション制御装置、およびシミュレーション制御方法
CN107665115B (zh) 一种软件开发平台及方法
CN118152277A (zh) 一种Bootloader刷写方法、装置、设备及介质
JP2001134464A (ja) 情報処理方法および装置
CN113703728A (zh) 一种辅助研发的微组件业务处理方法、装置以及设备
CN115509620A (zh) 待更新模块确定方法和装置
JPH06149561A (ja) ソフトウェア開発装置
JP2010061198A (ja) 検証支援プログラム、検証支援装置、および検証支援方法

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees