您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python多任務(wù)是怎么發(fā)生的”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python多任務(wù)是怎么發(fā)生的”吧!
準(zhǔn)備工作
增加程序執(zhí)行過(guò)程中細(xì)節(jié)的輸出。
單任務(wù)時(shí)執(zhí)行結(jié)果
WT:<<<<WriteData:4<<<<
WT:int DataArray::addData(0)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[0] = 0;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(1)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[1] = 1;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(2)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[2] = 2;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(3)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[3] = 3;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(4)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[4] = 4;
WT: m_dataSize++;
WT: }
WT:}
RT:>>>>ReadData:4>>>>
RT:int DataArray::getDataSize()
RT:{
RT: return 5;
RT:}
RT::----data_size=5
RT:int DataArray::getData(0)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[0];, value =0
RT: }
RT:}
RT:int DataArray::getData(1)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[1];, value =1
RT: }
RT:}
RT:int DataArray::getData(2)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[2];, value =2
RT: }
RT:}
RT:int DataArray::getData(3)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[3];, value =3
RT: }
RT:}
RT:int DataArray::getData(4)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[4];, value =4
RT: }
RT:}
RT:----total=10
上面的輸出只是寫(xiě)五個(gè)數(shù),讀五個(gè)數(shù)的部分,但是可以看出寫(xiě)數(shù)據(jù)處理(WT)
完全結(jié)束以后,讀數(shù)據(jù)處理(RT)才開(kāi)始執(zhí)行。這是數(shù)據(jù)處理正確進(jìn)行的必要條件,記住這一點(diǎn)。
多任務(wù)(線程)條件下的執(zhí)行結(jié)果
RT:>>>>ReadData:WT:<<<<WriteData:0<<<<
WT:int DataArray::addData(0)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[0] = 0;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(1)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[1] = 1;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(2)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[2] = 2;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(3)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[3] = 3;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(4)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[4] = 4;
WT: m_dataSize++;
WT: }
WT:}
WT:<<<<WriteData:1<<<<
WT:int DataArray::addData(0)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
0>>>>
RT:int DataArray::getDataSize()
RT:{
RT: return 5;
RT:}
RT::----data_size=5
RT:int DataArray::getData(0)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[0]RT: }
RT:}
RT:int DataArray::getData(1)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[1]RT: }
RT:}
RT:int DataArray::getData(2)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[2]RT: }
RT:}
RT:int DataArray::getData(3)
RT:{
RT: if(index >= 0 && index < m_dataSize)
WT: {
WT: m_buffer[5] = 0;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(1)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[6] = 1;
WT: m_dataSize++;
WT: }
WT:}
如果程序可以看出寫(xiě)數(shù)據(jù)處理和讀數(shù)據(jù)處理隨機(jī)交替進(jìn)行,執(zhí)行結(jié)果會(huì)怎么樣沒(méi)有人能說(shuō)清楚。另外雖然本例中沒(méi)有涉及,如果內(nèi)存關(guān)聯(lián)處理,則經(jīng)常會(huì)出現(xiàn)內(nèi)存破壞而導(dǎo)致死機(jī)等各種問(wèn)題。而且由于任務(wù)切換的隨機(jī)性,問(wèn)題的發(fā)生也是隨機(jī)的,這可能是多任務(wù)變成最大的難點(diǎn)。
感謝各位的閱讀,以上就是“Python多任務(wù)是怎么發(fā)生的”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python多任務(wù)是怎么發(fā)生的這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。