ねじ(Thread)


📚 定義#テイギ#


スレッドは、1つのプロセス内で実行される複数のストリームのユニットであり、プロセスによって割り当てられたリソースによって実行されるユニットである.
デフォルトでは、プロセスが作成されると、プライマリ・スレッドが作成され、追加のスレッドが作成されない限り、すべてのプログラム・コードがプライマリ・スレッドで実行されます.

📚 マルチスレッド


これは、1つのプロセスで2つ以上のスレッドが同時に実行されることを意味する.
1つのプロセスで並列に実行し、同じ環境で異なるタスクを同時に処理するためにマルチスレッドを使用します.(Webブラウザのレンダリング)
各スレッドは、プロセスにスタックを個別に割り当て、同じプロセス内の他のスレッドとコード、データ、heapなどのオペレーティングシステムリソースを共有します.
Stackはなぜ独立して割り当てられたのですか?
Stackは,関数呼び出し時に渡されるパラメータ,返されるアドレス値,関数に宣言される変数などを格納するための空間である.これらのスタックがスレッド間で共有されている場合、ブレンドスレッドの順序で呼び出されるため、複雑になります.
したがって,スムーズに動作するためにスタックをスレッド別に個別に割り当て,独立して動作させる.
1つのスレッドがプロセスリソースを変更した場合、隣接するスレッドにも変更結果がすぐに表示されます.

マルチスレッドメモリ構造



数値スレッドを使用する理由


システムのリソース消費を削減(リソース効率の向上)


作成プロセスではメモリスペース、プログラムコードなどの実行環境を構築する必要がありますが、スレッドを作成するには環境を構築する必要がないため、コストがかかりません.
したがって、複数のプロセスに比べて、プロセスを作成してリソースを割り当てるシステムプロトコルが少なく、リソースをより効率的に管理できます.

応答時間の短縮


スレッドはプロセス内のスタック領域以外のすべてのメモリを共有するため、IPC通信は不要であるため、負担は軽い.
スレッド間で共有されるリソースには、おなじみのスレッドが共有する変数が含まれていますか?

📚 実装例(Java)


beep音声と文字を同時に出力


BeepThread.java

import java.awt.Toolkit;

public class BeepThread extends Thread{

	@Override
	public void run() {
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		
		for(int i = 0; i < 5; i++) {
			toolkit.beep();
			
			try {
				Thread.sleep(500);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

BeepPrint.java

public class BeepPrint {
	public static void main(String[] args) {
		Thread beepThread = new BeepThread();
		
        	// 익명 클래스
		Thread anonymousThread = new Thread() {

			@Override
			public void run() {
				for(int i = 0; i < 5; i++) {
					System.out.println("beep");
					
					try {
						Thread.sleep(500);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		};
		
		beepThread.start();
		anonymousThread.start();
	}
}
[注意]
  • milketea_good - 2. プロセスとスレッド
  • goban.log-スレッドと同期
  • XXXX - [OS] Thread (1)
  • Turna開発日記-[オペレーティングシステム]プロセスとスレッドの違い/マルチプロセスとマルチスレッドの概念、特徴、メリットとデメリット
  • コーディングブラックボール-[Java]Thread 1、スレッドの概念と基本例