[RC]第4週コンセプト-マルチスレッド
3987 ワード
[Thread vs Multi - Thread]
1.Threadは行/ストリーム/シーケンスです。
2.Threadの属性
説明する前に、アプリケーションの作成方法を見てみましょう.UIを作成したり、Logicを構成したり、UIやデータを更新したりします.このとき,Logic構成とUI/データ更新をTask(ワークセル)と呼ぶ.
1つの授業の例でThreadを表現すると、次の画像のように表現できます.
下の写真を見ると、授業とノートが別々に行われているという気まずいところがあります.上記のように、授業が行われると、先生は授業を開始し、授業を停止し、学生はメモを取り始め、先生は授業を再開する形で行われます.
しかし、実際の授業は先生がメモを取り続け、学生がたまにメモを取る形で行われています.この授業でもう1枚絵を描きます.
この場合はマルチスレッドであり,以前はクラスノートが1つのスレッドで繰り返されていたのが単一スレッドであった.
今このような状況をiOSに変えると、次のように変わります.
マルチスレッドが発生した原因は何ですか?
マルチスレッドフレンドリー?
通帳に200万ウォンが入っていると仮定した場合、MacBookを購入して家賃を払う.MacBookを購入して家賃を支払うとしたら、MacBookを購入すると10秒後に通帳のお金が切れ、家賃がすぐに消えてしまうことを想像してみてください.そうなると130万ウォンの残高が残る.
コードで書くと
전역 var money = 2000000
func apple() {
var myMoney = money
usleep(10000000)//10초
myMoney -= 1500000
money = myMoney
}
func houseMoney() {
var myMoney = money
myMoney -= 700000
money = myMoney
}
//최종적으로 우리는 멕북도 사고 월세도 냈지만 1300000원이 잔고로 남게된다.
この問題は共有リソースの問題です.マルチスレッド操作を続行すると、このような問題が発生する可能性があります.
この問題を解決する方法は肝心な部分,Mutex,細い麻布で解決できる.
1つの共有リソース、2つのThread(?)考えてみろ.
共有リソースにAという名前のThreadが働いている間に、Bという名前のThreadが入ってきて仕事をすることができますか?
あり得ない.このように1つのThreadが作業状態に入り、まだ作業が完了していない場合は、もう1つのThreadが入らないことを意味します.
今ここで改めて質問しよう
マルチスレッドはいいですか?
正解じゃない
単一スレッドの欠点のように,マルチスレッドにも欠点がある.
チームメンバーを例にとると、単一スレッドを独自に完了できるチームメンバーが3人、マルチスレッドに乗る能力のあるチームメンバーが3人いると考えると、チームの効率はもちろん向上します.
また、チームメンバーが独自に完了したタスクを4人のメンバーがいるチームメンバーに渡すと、完了できますか?個人別に計算できますが、オペレーティングシステム別に計算すると、各チームメンバーに実行可能なタスクがあるため、実行できません.また、マルチスレッド内のタスクを単一スレッドで実行することもできます.したがって,マルチスレッドのみがよいと考える考えは正しくない.
シングルスレッドのメリット
リソースアクセスの同期の問題を考慮する必要はありません.
複数のスレッドが共有するリソースを使用する場合、各スレッドは共通のリソースへのアクセスを制御する必要があります.これにより、プログラマは多くの努力を払って、多くのオーバーヘッドを発生する必要があります.単一スレッドモデルでは、これらの操作を実行する必要はありません.
転職は不要です.
タスク転送は、複数のプロセスが1つのプロセッサを共有するときに発生するタスクであり、コストがかかります.
単一スレッドの欠点
複数のCPUは使用できません.
プロセッサを最大限に利用するには、クラスタモジュールを使用するか、外部で複数のプログラムインスタンスを実行する方法を使用する必要があります.
2つのタスクを1つのスレッドとして処理するか、短時間で2つのスレッドが交互に実行される2つのスレッドとして処理すると仮定します.だから同時に2つの任務が処理されていると感じた.
ただし、2つのスレッドを使用する時間は、スレッド間のタスク切り替え(context switching)に時間がかかるため、単一スレッドを使用する時間よりも長い場合があります.
したがって,CPUのみを用いて計算を行うと,マルチスレッドに比べて単一スレッドのプログラミング効率が高くなる.
マルチスレッドの利点
新しいプロセスを作成するよりも、既存のプロセスでスレッドを作成するほうが速いです.
マルチスレッドの欠点
リファレンス
https://velog.io/@eunjin/OS-%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%9D%98%EB%AF%B8
Reference
この問題について([RC]第4週コンセプト-マルチスレッド), 我々は、より多くの情報をここで見つけました https://velog.io/@rlawnstn01023/RC-4주차-개념-Multi-Threadテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol