最新整理:iOS面試題-常問(wèn)多線程問(wèn)題(六)

前言:

最近把 iOS 面試中可能會(huì)遇到的問(wèn)題整理了一番, 題目大部分是網(wǎng)上收錄的, 方便自己鞏固復(fù)習(xí), 也分享給大家砌庄; 希望對(duì)大家有所幫助!

  • 對(duì)于答案,不一定都合適盹舞,歡迎大家積極討論;整理不易隘庄,如果您覺(jué)得還不錯(cuò)踢步,麻煩在文末 “點(diǎn)個(gè)贊” ,或者留下您的評(píng)論“Mark” 一下丑掺,謝謝您的支持

目錄合集

iOS面試題-常問(wèn)多線程問(wèn)題(六)

1.什么是多線程?

  • 多線程是指實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù),進(jìn)而提升整體處理性能获印。
  • 同一時(shí)間,CPU 只能處理一條線程,多線程并發(fā)執(zhí)行,其實(shí)是 CPU 快速的在多條線程之間調(diào)度(切換)如果 CPU 調(diào)度線程的時(shí)間足夠快, 就造成了多線程并發(fā)執(zhí)行的假象
    • 主線程的棧區(qū) 空間大小為1M,非常非常寶貴
    • 子線程的棧區(qū) 空間大小為512K內(nèi)存空間
  • 優(yōu)勢(shì)
    充分發(fā)揮多核處理器的優(yōu)勢(shì),將不同線程任務(wù)分配給不同的處理器街州,真正進(jìn)入“并行計(jì)算”狀態(tài)
  • 弊端
    新線程會(huì)消耗內(nèi)存控件和cpu時(shí)間兼丰,線程太多會(huì)降低系統(tǒng)運(yùn)行性能。

2.進(jìn)程和線程區(qū)別?

  • 進(jìn)程:正在運(yùn)行的程序唆缴,負(fù)責(zé)程序的內(nèi)存分配鳍征,每一個(gè)進(jìn)程都有自己獨(dú)立的虛擬內(nèi)存空間。(一個(gè)程序運(yùn)行的動(dòng)態(tài)過(guò)程)
  • 線程:線程是進(jìn)程中一個(gè)獨(dú)立執(zhí)行的路徑(控制單元)一個(gè)進(jìn)程至少包含一條線程面徽,即主線程可以將耗時(shí)的執(zhí)行路徑(如網(wǎng)絡(luò)請(qǐng)求)放在其他線程中執(zhí)行艳丛。
  • 進(jìn)程和線程的比較
    • 線程是 CPU 調(diào)用的最小單位
    • 進(jìn)程是 CPU 分配資源和調(diào)度的單位
    • 一個(gè)程序可以對(duì)應(yīng)多個(gè)進(jìn)程,一個(gè)進(jìn)程中可有多個(gè)線程,但至少要有一條線程,
    • 同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程資源

3.線程間怎么通信?

  • 線程間的通信體現(xiàn): 一個(gè)線程傳遞數(shù)據(jù)給另一個(gè)線程,
  • 在一個(gè)線程中執(zhí)行完特定的任務(wù)后,轉(zhuǎn)到另一個(gè)線程繼續(xù)執(zhí)行任務(wù)趟紊。

4.iOS的多線程方案有哪幾種氮双?

5. 什么是GCD?

GCD(Grand Central Dispatch), 又叫做大中央調(diào)度, 它對(duì)線程操作進(jìn)行了封裝,加入了很多新的特性,內(nèi)部進(jìn)行了效率優(yōu)化,提供了簡(jiǎn)潔的C語(yǔ)言接口, 使用更加高效,也是蘋果推薦的使用方式.

6.GCD 的隊(duì)列類型?

GCD的隊(duì)列可以分為2大類型

  • 并發(fā)隊(duì)列(Concurrent Dispatch Queue
    可以讓多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行(自動(dòng)開(kāi)啟多個(gè)線程同時(shí)執(zhí)行任務(wù))
    并發(fā)功能只有在異步(dispatch_async)函數(shù)下才有效

  • 串行隊(duì)列(Serial Dispatch Queue
    讓任務(wù)一個(gè)接著一個(gè)地執(zhí)行(一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù)),按照FIFO順序執(zhí)行.

7.什么是同步和異步任務(wù)派發(fā)(synchronous和asynchronous)?

GCD多線程經(jīng)常會(huì)使用 dispatch_syncdispatch_async函數(shù)向指定隊(duì)列添加任務(wù),分別是同步和異步

  • 同步指阻塞當(dāng)前線程,既要等待添加的耗時(shí)任務(wù)塊Block完成后,函數(shù)才能返回,后面的代碼才能繼續(xù)執(zhí)行
  • 異步指將任務(wù)添加到隊(duì)列后,函數(shù)立即返回,后面的代碼不用等待添加的任務(wù)完成后即可執(zhí)行,異步提交無(wú)法確定任務(wù)執(zhí)行順序

8.dispatch_after使用?

通過(guò)該函數(shù)可以讓提交的任務(wù)在指定時(shí)間后開(kāi)始執(zhí)行,也就是延遲執(zhí)行;

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"10秒后開(kāi)始執(zhí)行")
    });

9.dispatch_group_t (組調(diào)度)的使用?

組調(diào)度可以實(shí)現(xiàn)等待一組操都作完成后執(zhí)行后續(xù)任務(wù).

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //請(qǐng)求1
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //請(qǐng)求2
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //請(qǐng)求3
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    //界面刷新
    NSLog(@"任務(wù)均完成霎匈,刷新界面");
});

10.dispatch_semaphore (信號(hào)量)如何使用?

  • 用于控制最大并發(fā)數(shù)
  • 可以防止資源搶奪

與他相關(guān)的共有三個(gè)函數(shù)戴差,分別是

dispatch_semaphore_create,  // 創(chuàng)建最大并發(fā)數(shù)
dispatch_semaphore_wait铛嘱。    // -1 開(kāi)始執(zhí)行 (0則等待)
dispatch_semaphore_signal暖释,  // +1 

11.什么是NSOperation?

NSOperation是基于GCD的上封裝,將線程封裝成要執(zhí)行的操作,不需要管理線程的生命周期和同步,比GCD可控性更強(qiáng)

例如:
可以加入操作依賴控制執(zhí)行順序,設(shè)置操作隊(duì)列最大并發(fā)數(shù),取消操作等

12. NSOperation如何實(shí)現(xiàn)操作依賴?

通過(guò)任務(wù)間添加依賴,可以為任務(wù)設(shè)置執(zhí)行的先后順序弄痹。接下來(lái)通過(guò)一個(gè)案例來(lái)展示設(shè)置依賴的效果饭入。

NSOperationQueue *queue=[[NSOperationQueue alloc] init];
//創(chuàng)建操作
NSBlockOperation *operation1=[NSBlockOperation blockOperationWithBlock:^(){
    NSLog(@"執(zhí)行第1次操作,線程:%@",[NSThread currentThread]);
}];
NSBlockOperation *operation2=[NSBlockOperation blockOperationWithBlock:^(){
    NSLog(@"執(zhí)行第2次操作肛真,線程:%@",[NSThread currentThread]);
}];
NSBlockOperation *operation3=[NSBlockOperation blockOperationWithBlock:^(){
    NSLog(@"執(zhí)行第3次操作谐丢,線程:%@",[NSThread currentThread]);
}];
//添加依賴
[operation1 addDependency:operation2];
[operation2 addDependency:operation3];
//將操作添加到隊(duì)列中去
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3];

13.是否可以把比較耗時(shí)的操作放在 NSNotification中?

  • 如果在異步線程發(fā)的通知,那么可以執(zhí)行比較耗時(shí)的操作;
  • 如果在主線程發(fā)的通知,那么就不可以執(zhí)行比較耗時(shí)的操作

14.說(shuō)幾個(gè)你在工作中使用到的線程安全的例子?

  • UIKit(必須在主線程)
  • FMDBDataBaseQueue(串行隊(duì)列)
  • 等等..

15.dispatch_barrier_(a)sync使用?

  • 一個(gè)dispatch barrier 允許在一個(gè)并發(fā)隊(duì)列中創(chuàng)建一個(gè)同步點(diǎn)乾忱。當(dāng)在并發(fā)隊(duì)列中遇到一個(gè)barrier, 他會(huì)延遲執(zhí)行barrier的block,等待所有在barrier之前提交的blocks執(zhí)行結(jié)束讥珍。 這時(shí),barrier block自己開(kāi)始執(zhí)行窄瘟。 之后衷佃, 隊(duì)列繼續(xù)正常的執(zhí)行操作。

16. dispatch_set_target_queue 使用?

dispatch_set_target_queue(dispatch_object_t object, dispatch_queue_t queue);

dispatch_set_target_queue 函數(shù)有兩個(gè)作用:第一蹄葱,變更隊(duì)列的執(zhí)行優(yōu)先級(jí)氏义;第二,目標(biāo)隊(duì)列可以成為原隊(duì)列的執(zhí)行階層图云。

  • 第一個(gè)參數(shù)是要執(zhí)行變更的隊(duì)列(不能指定主隊(duì)列和全局隊(duì)列)
  • 第二個(gè)參數(shù)是目標(biāo)隊(duì)列(指定全局隊(duì)列)
    主線程是相對(duì)于什么而言的

17.在項(xiàng)目什么時(shí)候選擇使用 GCD惯悠,什么時(shí)候選 擇 NSOperation?

  • 項(xiàng)目中使用 NSOperation 的優(yōu)點(diǎn)是 NSOperation 是對(duì)線程的高度抽象,在項(xiàng)目中使 用它竣况,會(huì)使項(xiàng)目的程序結(jié)構(gòu)更好克婶,子類化 NSOperation 的設(shè)計(jì)思路,是具有面向?qū)?象的優(yōu)點(diǎn)(復(fù)用丹泉、封裝)情萤,使得實(shí)現(xiàn)是多線程支持,而接口簡(jiǎn)單摹恨,建議在復(fù)雜項(xiàng)目中 使用筋岛。
  • 項(xiàng)目中使用 GCD 的優(yōu)點(diǎn)是 GCD 本身非常簡(jiǎn)單、易用晒哄,對(duì)于不復(fù)雜的多線程操 作泉蝌,會(huì)節(jié)省代碼量,而 Block 參數(shù)的使用揩晴,會(huì)是代碼更為易讀,建議在簡(jiǎn)單項(xiàng)目中 使用贪磺。

18.說(shuō)一下 OperationQueue 和 GCD 的區(qū)別硫兰,以及各自的優(yōu)勢(shì)

  1. GCD是純C語(yǔ)?言的API,NSOperationQueue是基于GCD的OC版本封裝
  2. GCD只?支持FIFO的隊(duì)列列寒锚,NSOperationQueue可以很?方便便地調(diào)整執(zhí)?行行順 序劫映、設(shè) 置最?大并發(fā)數(shù)量量
  3. NSOperationQueue可以在輕松在Operation間設(shè)置依賴關(guān)系,?而GCD 需要寫很 多的代碼才能實(shí)現(xiàn)
  4. NSOperationQueue?支持KVO刹前,可以監(jiān)測(cè)operation是否正在執(zhí)?行行 (isExecuted)泳赋、 是否結(jié)束(isFinished),是否取消(isCanceld)
  5. GCD的執(zhí)?行行速度?比NSOperationQueue快 任務(wù)之間不不太互相依賴:GCD 任務(wù)之間 有依賴\或者要監(jiān)聽(tīng)任務(wù)的執(zhí)?行行情況:NSOperationQueue

19.GCD如何取消線程?

GCD目前有兩種方式可以取消線程:

1.dispatch_block_cancel類似NSOperation一樣喇喉,可以取消還未執(zhí)行的線程祖今。但是沒(méi)辦法做到取消一個(gè)正在執(zhí)行的線程。

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_block_t block1 = dispatch_block_create(0, ^{
    NSLog(@"block1");
});
dispatch_block_t block2 = dispatch_block_create(0, ^{
    NSLog(@"block2");
});

dispatch_block_t block3 = dispatch_block_create(0, ^{
    NSLog(@"block3");
});

dispatch_async(queue, block1);
dispatch_async(queue, block2);
dispatch_async(queue, block3);
dispatch_block_cancel(block3); // 取消 block3

2.使用臨時(shí)變量+return 方式取消 正在執(zhí)行的Block

__block BOOL gcdFlag= NO; // 臨時(shí)變量
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    for (long i=0; i<1000; i++) {
        NSLog(@"正在執(zhí)行第i次:%ld",i);
        sleep(1);
        if (gcdFlag==YES) { // 判斷并終止
            NSLog(@"終止");
            return ;
        }
    };
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                   NSLog(@"我要停止啦");
                   gcdFlag = YES;
               });

20.NSOperation取消線程方式?

1.通過(guò) cancel 取消未執(zhí)行的單個(gè)操作

NSOperationQueue *queue1 = [[NSOperationQueue alloc]init];
NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"block11");
}];
NSBlockOperation *block2 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"block22");
}];
NSBlockOperation *block3 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"block33");
}];
[block3 cancel];
[queue1 addOperations:@[block1,block2,block3] waitUntilFinished:YES];

2.移除隊(duì)列里面所有的操作,但正在執(zhí)行的操作無(wú)法移除

[queue1 cancelAllOperations];

3.掛起隊(duì)列千诬,使隊(duì)列任務(wù)不再執(zhí)行耍目,但正在執(zhí)行的操作無(wú)法掛起

queue1.suspended = YES;

4.我們可以自定義NSOperation,實(shí)現(xiàn)取消正在執(zhí)行的操作徐绑。其實(shí)就是攔截main方法邪驮。

 main方法:
 1、任何操作在執(zhí)行時(shí)傲茄,首先會(huì)調(diào)用start方法毅访,start方法會(huì)更新操作的狀態(tài)(過(guò)濾操作,如過(guò)濾掉處于“取消”狀態(tài)的操作)。
 2盘榨、經(jīng)start方法過(guò)濾后喻粹,只有正常可執(zhí)行的操作较曼,就會(huì)調(diào)用main方法磷斧。
 3、重寫操作的入口方法(main)捷犹,就可以在這個(gè)方法里面指定操作執(zhí)行的任務(wù)弛饭。
 4、main方法默認(rèn)是在子線程異步執(zhí)行的萍歉。

21. 什么是線程安全?

  • 1塊資源可能會(huì)被多個(gè)線程共享侣颂,也就是多個(gè)線程可能會(huì)訪問(wèn)同一塊資源
  • 比如多個(gè)線程訪問(wèn)同一個(gè)對(duì)象、同一個(gè)變量枪孩、同一個(gè)文件
  • 當(dāng)多個(gè)線程訪問(wèn)同一塊資源時(shí)憔晒,很容易引發(fā)數(shù)據(jù)錯(cuò)亂和數(shù)據(jù)安全問(wèn)題

22.線程安全的處理手段有哪些?

  • 加鎖
  • 同步執(zhí)行

23.如何理解GCD死鎖?

  • 所謂死鎖.通常是指2個(gè)操作相互等待對(duì)方完成,造成死循環(huán),于是2個(gè)操作都無(wú)法進(jìn)行,就產(chǎn)生了死鎖;

24.自旋鎖和互斥鎖的是什么?

  • 自旋鎖會(huì)忙等: 所謂忙等蔑舞,即在訪問(wèn)被鎖資源時(shí)拒担,調(diào)用者線程不會(huì)休眠,而是不停循環(huán)在那里攻询,直到被鎖資源釋放鎖从撼。
  • 互斥鎖會(huì)休眠: 所謂休眠,即在訪問(wèn)被鎖資源時(shí)钧栖,調(diào)用者線程會(huì)休眠低零,此時(shí)cpu可以調(diào)度其他線程工作。直到被鎖資源釋放鎖拯杠。此時(shí)會(huì)喚醒休眠線程掏婶。

25.OC你了解的鎖有哪些?

  • os_unfair_lock ios10 開(kāi)始
  • OSSpanLock ios10 廢棄
  • dispatch_semaphore 建議使用,性能也比較好
  • dispatch_mutex
  • dispatch_queue 串行
  • NSLock 對(duì) mutex 封裝
  • @synchronized 性能最差

26:自旋和互斥什么情況下使用潭陪?

什么情況使用自旋鎖比較劃算雄妥?

  • 預(yù)計(jì)線程等待鎖的時(shí)間很短
  • 加鎖的代碼(臨界區(qū))經(jīng)常被調(diào)用最蕾,但競(jìng)爭(zhēng)情況很少發(fā)生
  • CPU資源不緊張
  • 多核處理器

什么情況使用互斥鎖比較劃算?

  • 預(yù)計(jì)線程等待鎖的時(shí)間較長(zhǎng)
  • 單核處理器
  • 臨界區(qū)有IO操作
  • 臨界區(qū)代碼復(fù)雜或者循環(huán)量大
  • 臨界區(qū)競(jìng)爭(zhēng)非常激烈

27.代碼分析一,此函數(shù)耗時(shí)? 輸出結(jié)果

dispatch_queue_t queue = dispatch_queue_create("test", nil);
dispatch_async(queue, ^{
    NSLog(@"1");
    sleep(1);
});
dispatch_async(queue, ^{
    NSLog(@"2");
    sleep(1);
});
dispatch_sync(queue, ^{
    NSLog(@"3");
    sleep(1);
});
此函數(shù)耗時(shí)?: 3秒
此函數(shù)輸出?: 123

  • 串行隊(duì)列異步執(zhí)行會(huì)開(kāi)新線程,同步執(zhí)行不會(huì)開(kāi)線程,在一個(gè)串行隊(duì)列了,則是按照順序執(zhí)行 耗時(shí)3秒 ,打印123;
  • 并發(fā): 任務(wù)以FIFO從序列中移除茎芭,然后并發(fā)運(yùn)行揖膜,可以按照任何順序完成。它會(huì)自動(dòng)開(kāi)啟多個(gè)線程同時(shí)執(zhí)行任務(wù)
  • 串行: 任務(wù)以FIFO從序列中一個(gè)一個(gè)執(zhí)行梅桩。一次只調(diào)度一個(gè)任務(wù)壹粟,隊(duì)列中的任務(wù)一個(gè)接著一個(gè)地執(zhí)行(一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù))而且只會(huì)開(kāi)啟一條線程

28.代碼分析二,打印結(jié)果

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_async(queue, ^{
    NSLog(@"1");
    [self performSelector:@selector(test) withObject:nil afterDelay:0];
    NSLog(@"3");
});

- (void)test{
    NSLog(@"2");
}

打印 1,3
performSelector after 是基于 timer 定制器,定時(shí)器又是基于 runloop 實(shí)現(xiàn)的;任務(wù)2在子線程中,子線程默認(rèn) runloop 是不開(kāi)啟的,所以不執(zhí)行2

29.請(qǐng)問(wèn)下面代碼的打印結(jié)果是什么宿百?

- (void)test{
    NSLog(@"2");
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSThread *thread = [[NSThread alloc]initWithBlock:^{
        NSLog(@"1");
    }];
    [thread start];
    [self performSelector:@selector(test) onThread:thread withObject:nil waitUntilDone:YES];
}

打印1

  • start 執(zhí)行完,線程就銷毀了.任務(wù) test 沒(méi)法執(zhí)行了

收錄 | 原文地址


結(jié)語(yǔ)

再次說(shuō)一聲趁仙,對(duì)于答案,不一定都合適垦页,歡迎大家積極討論雀费;整理不易,如果您覺(jué)得還不錯(cuò)痊焊,麻煩在文末 “點(diǎn)個(gè)贊” 盏袄,或者留下您的評(píng)論“Mark” 一下,謝謝您的支持


推薦文集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薄啥,一起剝皮案震驚了整個(gè)濱河市辕羽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垄惧,老刑警劉巖刁愿,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異到逊,居然都是意外死亡铣口,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門觉壶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脑题,“玉大人,你說(shuō)我怎么就攤上這事铜靶⌒袢洌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵旷坦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我佑稠,道長(zhǎng)秒梅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任舌胶,我火速辦了婚禮捆蜀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己辆它,他們只是感情好誊薄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锰茉,像睡著了一般呢蔫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上飒筑,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天片吊,我揣著相機(jī)與錄音,去河邊找鬼协屡。 笑死俏脊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肤晓。 我是一名探鬼主播爷贫,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼补憾!你這毒婦竟也來(lái)了漫萄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤余蟹,失蹤者是張志新(化名)和其女友劉穎卷胯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體威酒,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窑睁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葵孤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片担钮。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尤仍,靈堂內(nèi)的尸體忽然破棺而出箫津,到底是詐尸還是另有隱情,我是刑警寧澤宰啦,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布苏遥,位于F島的核電站,受9級(jí)特大地震影響赡模,放射性物質(zhì)發(fā)生泄漏田炭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一漓柑、第九天 我趴在偏房一處隱蔽的房頂上張望教硫。 院中可真熱鬧叨吮,春花似錦、人聲如沸瞬矩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)景用。三九已至涵叮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丛肢,已是汗流浹背围肥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜂怎,地道東北人穆刻。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像杠步,于是被迫代替她去往敵國(guó)和親氢伟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.進(jìn)程與線程 進(jìn)程:1.進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某次數(shù)據(jù)集合的一次運(yùn)行活動(dòng)幽歼,它是操作系統(tǒng)分配資源的基...
    iOS打工犭袁閱讀 4,059評(píng)論 0 10
  • 1.進(jìn)程與線程 進(jìn)程:1.進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某次數(shù)據(jù)集合的一次運(yùn)行活動(dòng)朵锣,它是操作系統(tǒng)分配資源的基...
    iOS打工犭袁閱讀 628評(píng)論 0 1
  • 1、什么是多線程甸私? 多線程(multithreading)诚些,是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多...
    Longshihua閱讀 1,743評(píng)論 0 11
  • 多線程 你們項(xiàng)目中為什么多線程用GCD而不用NSOperation呢? 你有沒(méi)有發(fā)現(xiàn)國(guó)外的大牛他們多線程都是用NS...
    b485c88ab697閱讀 17,436評(píng)論 11 83
  • 今天感恩節(jié)哎皇型,感謝一直在我身邊的親朋好友诬烹。感恩相遇!感恩不離不棄弃鸦。 中午開(kāi)了第一次的黨會(huì)绞吁,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,551評(píng)論 0 11