プロセスとスレッドの関係
3187 ワード
スレッドは何ですか?プロセスは何ですか?両者にはどんな違いと連絡がありますか。
答え:1つのプログラムには少なくとも1つのプロセスがあり、1つのプロセスには1つのスレッドがありません.プロセス:1つのプログラムの1回の実行で、実行中に独立したメモリユニットを持ち、複数のスレッドが1つのメモリを共有します.
スレッド:スレッドとは、プロセス内の実行単位です.連絡:スレッドはプロセスの基本構成単位の違いである:(1)スケジューリング:スレッドはスケジューリングと割り当ての基本単位とし、プロセスはリソースを持つ基本単位として(2)同時性:プロセス間だけが同時実行可能であり、同じプロセスの複数のスレッド間でも同時実行可能である(3)リソースを持つ:プロセスはリソースを持つ独立した単位であり、スレッドはシステムリソースを持つが、プロセスに属するリソースにアクセスできる.(4)システムオーバーヘッド:プロセスの作成または取り消し時に、システムがリソースを割り当てて回収するため、システムのオーバーヘッドはスレッドの作成または取り消し時のオーバーヘッドより明らかに大きい.オペレーティングシステムには複数のソフトウェアが実行されています(QQ、office、音楽など)、これらはすべて1つのプロセスですが、各プロセスには多くのスレッドがあります(例えばQQ、同時にチャットしたり、ファイルを送信したりすることができます).
スレッドとRunLoopの間には1つの対応があり,その関係は1つのグローバルなDictionary里に保存される.プログラムが作成されたばかりの頃はRunLoopはありませんでしたが、自分から取得しなければ、それはずっとあります.RunLoopの作成は初回取得時に発生し,RunLoopの破棄はスレッド終了時に発生する.1つのスレッドの内部でのみRunLoopを取得できます(メインスレッドを除きます).
プライマリ・スレッドを過剰に負担させるには、常に.UImitはメインスレッド上ですべての作業を行うため、レンダリング、チューブタッチ反応、応答入力などが必要です.プライマリ・スレッドをずっと使用するリスクは、コードが本当にプライマリ・スレッドをブロックした場合、appが反応を失うことです.
iOSマルチスレッド
iOSの中のマルチスレッドは、Cocoaフレームワークの下のマルチスレッドであり、Cocoaのパッケージを通じて、私たちにもっと四角い使用スレッドを使用させることができます.C++をしたことがある学生はスレッドに対してもっと多くの解を持っているかもしれません.例えば、スレッドの創立、信号、共有変すなわち,スレッドのオブジェクト化抽象は,我々のエンジニアリング,プロバイダの頑丈性を減少させる.
NSThread
-NSObject
NSOperation
NSInvocationOperation
NSBlockOperation
GCD
スレッド同期
NSLock
@synchronized
-- GCD
--
dispatch_asyncとdispatch_sync区別
前者は同期が進行するとメインスレッドがブロックされます
dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
NSLog(@"1");
dispatch_sync(concurrentQueue, ^(){
NSLog(@"2");
[NSThread sleepForTimeInterval:10];
NSLog(@"3");
});
NSLog(@"4");
出力:
11:36:25.313 GCDSeTest[544:303] 1
11:36:25.313 GCDSeTest[544:303] 2
11:36:30.313 GCDSeTest[544:303] 3//
11:36:30.314 GCDSeTest[544:303] 4
後者は非同期で行われる
dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
NSLog(@"1");
dispatch_async(concurrentQueue, ^(){
NSLog(@"2");
[NSThread sleepForTimeInterval:5];
NSLog(@"3");
});
NSLog(@"4");
出力:
11:42:43.820 GCDSeTest[568:303] 1
11:42:43.820 GCDSeTest[568:303] 4
11:42:43.820 GCDSeTest[568:1003] 2
11:42:48.821 GCDSeTest[568:1003] 3//