什么是上下文切換
對(duì)于單核單線程 CPU 而言,在某一時(shí)刻只能執(zhí)行一條 CPU 指令。上下文切換 (Context Switch) 是一種將 CPU 資源從一個(gè)進(jìn)程分配給另一個(gè)進(jìn)程的機(jī)制。從用戶角度看,計(jì)算機(jī)能夠并行運(yùn)行多個(gè)進(jìn)程,這恰恰是操作系統(tǒng)通過(guò)快速上下文切換造成的結(jié)果。在切換的過(guò)程中,操作系統(tǒng)需要先存儲(chǔ)當(dāng)前進(jìn)程的狀態(tài) (包括內(nèi)存空間的指針,當(dāng)前執(zhí)行完的指令等等),再讀入下一個(gè)進(jìn)程的狀態(tài),然后執(zhí)行此進(jìn)程。
使用多線程的好處是什么
多線程是程序員不得不知的基本素養(yǎng)之一,所以,下面我們給出一些多線程編程的好處
能夠提高對(duì)用戶的響應(yīng)順序
在流程中的資源共享
比較經(jīng)濟(jì)適用
能夠?qū)Χ嗑程架構(gòu)有深入的理解
進(jìn)程終止的方式
進(jìn)程的終止
進(jìn)程在創(chuàng)建之后,它就開(kāi)始運(yùn)行并做完成任務(wù)。然而,沒(méi)有什么事兒是永不停歇的,包括進(jìn)程也一樣。進(jìn)程早晚會(huì)發(fā)生終止,但是通常是由于以下情況觸發(fā)的
正常退出(自愿的)
錯(cuò)誤退出(自愿的)
嚴(yán)重錯(cuò)誤(非自愿的)
被其他進(jìn)程殺死(非自愿的)
正常退出
多數(shù)進(jìn)程是由于完成了工作而終止。當(dāng)編譯器完成了所給定程序的編譯之后,編譯器會(huì)執(zhí)行一個(gè)系統(tǒng)調(diào)用告訴操作系統(tǒng)它完成了工作。這個(gè)調(diào)用在 UNIX 中是exit,在 Windows 中是ExitProcess。面向屏幕中的軟件也支持自愿終止操作。字處理軟件、Internet 瀏覽器和類似的程序中總有一個(gè)供用戶點(diǎn)擊的圖標(biāo)或菜單項(xiàng),用來(lái)通知進(jìn)程刪除它所打開(kāi)的任何臨時(shí)文件,然后終止。
錯(cuò)誤退出
進(jìn)程發(fā)生終止的個(gè)原因是發(fā)現(xiàn)嚴(yán)重錯(cuò)誤,例如,如果用戶執(zhí)行如下命令
ccfoo.c
為了能夠編譯 foo.c 但是該文件不存在,于是編譯器就會(huì)發(fā)出聲明并退出。在給出了錯(cuò)誤參數(shù)時(shí),面向屏幕的交互式進(jìn)程通常并不會(huì)直接退出,因?yàn)檫@從用戶的角度來(lái)說(shuō)并不合理,用戶需要知道發(fā)生了什么并想要進(jìn)行重試,所以這時(shí)候應(yīng)用程序通常會(huì)彈出一個(gè)對(duì)話框告知用戶發(fā)生了系統(tǒng)錯(cuò)誤,是需要重試還是退出。
嚴(yán)重錯(cuò)誤
進(jìn)程終止的第三個(gè)原因是由進(jìn)程引起的錯(cuò)誤,通常是由于程序中的錯(cuò)誤所導(dǎo)致的。例如,執(zhí)行了一條非法指令,引用不存在的內(nèi)存,或者除數(shù)是 0 等。在有些系統(tǒng)比如 UNIX 中,進(jìn)程可以通知操作系統(tǒng),它希望自行處理某種類型的錯(cuò)誤,在這類錯(cuò)誤中,進(jìn)程會(huì)收到信號(hào)(中斷),而不是在這類錯(cuò)誤出現(xiàn)時(shí)直接終止進(jìn)程。
被其他進(jìn)程殺死
第四個(gè)終止進(jìn)程的原因是,某個(gè)進(jìn)程執(zhí)行系統(tǒng)調(diào)用告訴操作系統(tǒng)殺死某個(gè)進(jìn)程。在 UNIX 中,這個(gè)系統(tǒng)調(diào)用是 kill。在 Win32 中對(duì)應(yīng)的函數(shù)是TerminateProcess(注意不是系統(tǒng)調(diào)用)。
Allen Bradley 1762-L40BXBR
GE Fanuc AC Sero Motor A06B-0502-B001#7000 CNC
FANUC 20M DC Servo Motor #A06B-0652-B005 _ A06B0652B005
Fanuc Servo Amplifier Part# A06B-6057-H007 Used
Enlarge
FANUC SERVO MOTOR AMPLIFIER DRIVE A06B-6066-H011
FANUC SERVO MOTOR 20S/1500 A06B-0505-B004
FANUC Q22/3000 AC Servo Motor A06B-0148-B075 #7008
No C97YA1846
A06B-0522-B251 FANUC
GE Fanuc A06B-0522-B251 AC SERVO MOTOR
FANUC A06B-6050-H104 _ A20B-1000-0560 13F VCU DRIVE CNC
FANUC AC Servo Motor 1-OSP/3000 A06B-0373-B169
GE Fanuc A06B-6089-H712 RESISTOR NEW
A06B-6079-H103 Fanuc Servo Amplifier Module Robot Part
Fanuc A06B-6089-H209 AC SERVO AMPLIFIER UNIT
Fanuc Servo Motor Amplifier Drive A06B-6066-H004
Enlarge
Fanuc Servo Motor A06B-0162-B175#0003 In Good Shape !!
One-day shipping available
Fanuc Servo Motor Alpha 6/3000 a06b-0128-b675#7076
One-day shipping available
FANUC AC MOTOR A06B-0313-B504#7008 NEW
Fanuc Servo Amplifier A06B-6079-H104 Used A06B6079H104
Fanuc Velocity Control Servo Drive A06B-6050-H303 NEW
Fanuc Robot Servo Motor A06B-0512-B001 #0054
Fanuc A22/1500 AC Servo Motor #A06B-0146-B675
Fanuc DC Servo Motor A06B-0614-B031 (2000M), Model 5
Fanuc AC Servo Motor A06B-0371-B575
Fanuc AC Servo Motor A06b-0512-b504 a06b0512b504 #7008
Fanuc Servo Amp A06B-6058-H224 - No Top Board
One-day shipping available
FANUC SERVO AMPLIFIER A06B-6066-H004 *NICE*
Fanuc AC Servo Motor, Model 1-OSP, # A06B-0373-B069
One-day shipping available
Fanuc AC Servo Drive A06B-6058-H004
FANUC AC Servo Amplifier Unit, A06B-6089-H101, B
One-day shipping available
FANUC Servo Motor 20F A06B-0352-B731 W/ ENCODER
GE Fanuc AC Servo Motor A06B-0505-B362#7008 2OS/1500
Fanuc AC Servo Motor A06B-0352-B731 20F 2000 rpm robot
FANUC A06B0373B069 SERVO MOTOR MODEL 1-OSP/3000
Fanuc Servo Amplifier A06B-6058-H004 #13404
GE FANUC AC SERVO MOTOR A06B-0314-B001
Fanuc DC Servo Motor A06B-0642-B005 A06B0642B005
FANUC SERVO AMPLIFIER A06B-60660H004 A2 DRIVER
POWER ON TEST, FREE S&H FEE
Enlarge
Fanuc A06B-6058-H006 Servo Amplifier #7351
FANUC A06B-0341-B231 SERVO MOTOR (MODEL-OF) NEW!
FANUC A06B-0142-B075 #7008 AC SERVO MOTOR
GE Fanuc A06B-0111-B103 BIS 2/5000 AC TS4602N2020E201
Fanuc A06B-6058-H221 Servo Amplifier
FANUC A06B-6047-H003 , tested warranty
GE FANUC A06B-6058-H006 SERVO AMPLIFIER
FANUC A06B-6135-H001 B PDM DISTRIBUTION MODULE***NNB***
Ge FANUC VELOCITY A06B-6050-H005 A06B6050H005
Ge FANUC A06B-6089-H101 AC SERVO AMP
Ge FANUC A06B-0116-B075 #0005 AC SERVO MOTOR
Fanuc Model 0 Motor A06B 0513 B201
FANUC A40L-0001-0353 RESISTOR A06B-6066-H711 New
FANUC VELOCITY CONTROL UNIT A06B-6050-H104 Used
FANUC A06B-0128-B577#7000 SERVO MOTOR Model 6/3000 Repr
FANUC A06B-0313-B504#7008 AC SERVO MOTOR New in Box
Fanuc A06B-6057-H006 Servo Amplifier (A06B6057H006)
FANUC SERVO AMPLIFIER A06B-6093-H102 A06B6093H102
FANUC SERVO POWER SUPPLY A06B-6081-H103 FREE SHIP
Fanuc A06B-6079-H103 Servo Amplifier Module EA7X18372
FANUC A06B-0532-B001 USPP A06B0532B001
FANUC 10M DC SERVO MOTOR A06B-0651-B
A06B-6047-H002 FANUC
One-day shipping available
GE/FANUC A06B-0085-B203 MOTOR 2000RPM 2.5KW ***NIB***
FANUC Spindle Unit A06B-6059-H003 Board #A16B-1100-0240
FANUC Servo Drive Amplifier A06B-6058-H301 A06B6058H301
GE Fanuc AC Servo Motor 30S A06B-0319-B232 3 phase
FANUC Servo Amplifier A06B-6090-H224 F _ A20B-2002-0157
Fanuc AC Servo Motor A06B 0128 B675 7008 Model 6/3000
Fanuc VCU Servo Amplifier Drive A06B-6057-H006
Fanuc C series drive A06B-6066-H004
Fanuc General Numeric Spindle Motor A06B-1006-B220 2000
Fanuc AC Servo Motor, Model M6/3000, # A06B-0162-B175
One-day shipping available
Fanuc AC Servo Motor A06B-0315-B202
Fanuc AC Servo Motor A06B-0142-B084
FANUC A06B-0215-B200-0100 NSFP A06B0215B2000100
FANUC A06B-0113-B175/0009 USPP A06B0113B1750009
FANUC A06B-0533-B551 USPP A06B0533B551
Fanuc 10S 1OS/3000 AC Servo Motor #A06B-0317-B003#7008
Fanuc servo motor a06b-0752-b901 new
Fanuc DC Servo Motor A06B-0632-B011
One-day shipping available
Fanuc Servo Motor A06B-0521-B041
One-day shipping available
GE Fanuc A06B-0632-B011 1200M A860-0303-T001 DC MOTOR
A06B-0105-B114 FANUC * 1 YR WARRANTY *
One-day shipping available
Fanuc AC Servo Motor A06B 0128 B577 7008 A06B0128B577
Fanuc Servo Amplifier A06B-6066-H223 _ A06B6066H223
GE Fanuc A06B-6079-H104 A06B6079H104 Servo Amplifier
One-day shipping available
FANUC DC Servo Motor A06B-0642-B011 Model 5M