Javaスレッドは安いです!何百万もの人々をつくりましょう
5930 ワード
Aditya Wardhanaによる写真
Javaスレッドは安いです.はい、あなたは右、私を聞いた.プロジェクトの織機を使用すると、文字通りJavaのスレッド数百万を作成できます.それについて話しましょう.
スレッドはJavaのどこにでもあります.たとえば、ほとんどのJava Webアプリケーションでは、スレッドを1つの要求/応答のペアを処理します.それぞれの要求/応答は独立しています.要求で、サーバは要求を解析して、必要に応じてデータベースを照会して、応答を送ります.それは簡単で簡単.彼らの何人が奉仕されているかは、重要でありません;プログラミングモデルは同じでシンプルです.
現在、Webサーバは何百万もの同時オープンソケットを扱うことができます.つまり、より多くのスレッドを作成することができれば、アプリケーションは同時にリクエストを処理できるようになります.この結論は直感的に聞こえるかもしれませんが、実際には、限られた数のスレッドしか作成できません.オペレーティングシステムは数千個以上のアクティブ(非アイドル)スレッドを効率的に処理できません.
実験を行い、Javaアプリケーションで作成できるスレッドをたくさん考えましょう.
私のコンピュータ*を使用して、私は4058スレッドを作成することができたし、アプリケーションがクラッシュしました.
ご覧の通り、我々はどのように多くのスレッドを作成することができますし、アプリケーションで使用できるように制限されます.
最近では,この制限を解決するプロジェクトloomと呼ばれる新しいプロジェクトが開発されている.それを使用して、我々は文字通り仮想スレッドの数百万を作成することができます.
私は、今ここでプロジェクト織機を使用して、類似した経験をします
スレッドと仮想スレッドの重要な違いは以下の通りです.仮想スレッドは、コード、ランタイム、およびdubberとプロファイルの正規スレッドについてです.つまり、開発者は新しいものを学ぶ必要はありません. 仮想スレッドはOSスレッドのラッパーではなくJavaエンティティです. 仮想スレッドはスーパー安いです. あなたがプロジェクト・ロームについてもっと知りたいなら、ここにリソースがあります.
https://cr.openjdk.java.net/~rpressler/loom/loom/sol1_part1.html
https://wiki.openjdk.java.net/display/loom/Main
コンピュータ構成:MacBook Pro(15インチ、2019)、2.3 GHz 8コアインテルコアI 9、16 GBのメモリ.
このポストはもともと投稿されました
Javaスレッドは安いです.はい、あなたは右、私を聞いた.プロジェクトの織機を使用すると、文字通りJavaのスレッド数百万を作成できます.それについて話しましょう.
Disclaimer: in this article, I will not explain how thread and virtual thread works and the underlying concept; rather, I will demo that we can create millions of virtual threads using project loom.
スレッドはJavaのどこにでもあります.たとえば、ほとんどのJava Webアプリケーションでは、スレッドを1つの要求/応答のペアを処理します.それぞれの要求/応答は独立しています.要求で、サーバは要求を解析して、必要に応じてデータベースを照会して、応答を送ります.それは簡単で簡単.彼らの何人が奉仕されているかは、重要でありません;プログラミングモデルは同じでシンプルです.
現在、Webサーバは何百万もの同時オープンソケットを扱うことができます.つまり、より多くのスレッドを作成することができれば、アプリケーションは同時にリクエストを処理できるようになります.この結論は直感的に聞こえるかもしれませんが、実際には、限られた数のスレッドしか作成できません.オペレーティングシステムは数千個以上のアクティブ(非アイドル)スレッドを効率的に処理できません.
実験を行い、Javaアプリケーションで作成できるスレッドをたくさん考えましょう.
package com.bazlur;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
public class ThreadCreationDemo {
public static void main(String[] args) {
var counter = new AtomicInteger();
while (true) {
new Thread(() -> {
var count = counter.incrementAndGet();
System.out.println("count = " + count);
LockSupport.park();
}).start();
}
}
}
whileループを使用して、新しいスレッドを作成し、それを駐車し続ける.AtomicIntegerを使用して、どのように多くのスレッドを作成し、アプリケーションをクラッシュさせるかをカウントします.私のコンピュータ*を使用して、私は4058スレッドを作成することができたし、アプリケーションがクラッシュしました.
ご覧の通り、我々はどのように多くのスレッドを作成することができますし、アプリケーションで使用できるように制限されます.
最近では,この制限を解決するプロジェクトloomと呼ばれる新しいプロジェクトが開発されている.それを使用して、我々は文字通り仮想スレッドの数百万を作成することができます.
私は、今ここでプロジェクト織機を使用して、類似した経験をします
package com.bazlur;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
public class VirtualThreadCreationDemo {
public static void main(String[] args) {
var counter = new AtomicInteger();
while (true) {
Thread.builder().virtual().task(() -> {
var threadCount = counter.incrementAndGet();
System.out.println("count = " + threadCount);
LockSupport.park();
});
}
}
}
上記のコードを使用して、私は400万以上の仮想スレッドを作成することができました.スレッドと仮想スレッドの重要な違いは以下の通りです.
https://cr.openjdk.java.net/~rpressler/loom/loom/sol1_part1.html
https://wiki.openjdk.java.net/display/loom/Main
コンピュータ構成:MacBook Pro(15インチ、2019)、2.3 GHz 8コアインテルコアI 9、16 GBのメモリ.
このポストはもともと投稿されました
Reference
この問題について(Javaスレッドは安いです!何百万もの人々をつくりましょう), 我々は、より多くの情報をここで見つけました https://dev.to/bazlur_rahman/java-threads-are-cheap-let-s-create-millions-of-them-24cmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol