84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际处理实际的用户请求的时间和资源要多的多。
那么问题来了,创建一个线程到底要有哪些开销?各个开销耗时多么?哪个开销最耗时?
走同样的路,发现不同的人生
通常 pthread_create
pthread_create
時間に関しては、スレッドを作成するときにシステムにリソースを直接申請するため、システム関数を呼び出してリソースを割り当てるのにどれくらい時間がかかるかを言うのは困難です。 リソースに関しては、Java スレッドのスレッド スタックが占有するメモリは Java ヒープの外にあるため、Java プログラムによって制御されず、システム リソースによってのみ制限されます。スレッドのデフォルトのスレッド スタック サイズは 1M です。 (これをさせる場合は -Xss 属性を設定することで設定できますが、スタックオーバーフローの問題に注意してください) ただし、ユーザーリクエストごとに新しいスレッドが作成されると、1024 個のユーザーライトスレッドが 1 G のメモリを占有します。システムが比較的大規模な場合、サブシステムのリソースが不足し、最終的にはプログラムがクラッシュします。
-Xss
追伸: 同じ理由で、Java プログラムで新しいスレッドを自由に開かないでください。特に高頻度のビジネスでは、スレッド プールを使用するようにしてください。そうしないと、メモリ不足やプログラムのクラッシュが発生しやすくなります。
オペレーティング システムにとって、スレッドの作成には非常にコストがかかります。同時に、スレッドの切り替え時にメモリ ページングを実行する必要があります。情報をメモリから再度読み取る必要があり、データの局所性が失われます。
通常
pthread_create
時間に関しては、スレッドを作成するときにシステムにリソースを直接申請するため、システム関数を呼び出してリソースを割り当てるのにどれくらい時間がかかるかを言うのは困難です。
リソースに関しては、Java スレッドのスレッド スタックが占有するメモリは Java ヒープの外にあるため、Java プログラムによって制御されず、システム リソースによってのみ制限されます。スレッドのデフォルトのスレッド スタック サイズは 1M です。 (これをさせる場合は
-Xss
属性を設定することで設定できますが、スタックオーバーフローの問題に注意してください) ただし、ユーザーリクエストごとに新しいスレッドが作成されると、1024 個のユーザーライトスレッドが 1 G のメモリを占有します。システムが比較的大規模な場合、サブシステムのリソースが不足し、最終的にはプログラムがクラッシュします。追伸: 同じ理由で、Java プログラムで新しいスレッドを自由に開かないでください。特に高頻度のビジネスでは、スレッド プールを使用するようにしてください。そうしないと、メモリ不足やプログラムのクラッシュが発生しやすくなります。
オペレーティング システムにとって、スレッドの作成には非常にコストがかかります。同時に、スレッドの切り替え時にメモリ ページングを実行する必要があります。情報をメモリから再度読み取る必要があり、データの局所性が失われます。