網状の解析のJavaのマルチスレッドバージョンで--49.Scalable IOを理解しやすい(2)

マルチスレッド設計

*戦略スレッドは主にマルチコアプロセッサで使用される、スケーラビリティを増加させます

労働者(私たちのワークグループ用)

反応器はすぐにプロセッサをトリガすることができるはずです

*プロセッサは、リアクトル処理遅くなる(理由:反応器サブタスクハンドラに対して発行されるので、シングルスレッドであるため、タスクはプロセッサがより多くの時間となる分散されるので、それは、反応器のプロセスを遅くします)

だから、別のスレッドの処理にいくつかの非IO処理を当てます

複数のスレッドリアクター

反応器スレッドは、IOで処理することができます

で、他の原子炉への負荷を分散

ロードバランシング、CPUとIOのレートマッチングするように

ワーカースレッド:

*速度を向上させるために、非IO処理をシェッド

原子炉のスレッド

同様のPOSA2 Proactor設計

*再計算バインドするイベント駆動型のプロセスを簡単に比較すると

それはまだ、純粋に非ブロック計算する必要があります

ロード・プロセスを処理するのに十分な*

*しかし、IOオーバーラップ処理を行うことが困難です

最高のアクションは、バッファへの最初の入力のすべてを読み取ることができます

スレッドプールを調整して制御することができます使用します

スレッドの数は、クライアントの数よりも通常少ないです

 または複数のクライアントは、原子炉との接続を開始し、我々はそれがスレッドプールの要求によって処理されていることがわかります

ビューには、スレッドプールを扱っ

共同作業

*ハンドオフ

各タスクは、有効または次のコールをトリガすることができます

それは非常に速く、非常に壊れやすいです

コールバック:分配各プロセッサのための

設定された状態、添付ファイルなど

GOFメディエーターモードの一種

キュー

たとえば:転送は、いくつかの段階でバッファ

先物

各タスクは、結果を生成することです

上記段階で相乗効果は、参加又は通知/待機します

 使用PoolExecutor

*調和のとれた作業スレッドプール

*主な方法は、(Runnableをr)を実行することです

*コントロール用:

タスクキューの種類

スレッドの最大数

スレッドの最小数

「暖かい」とオンデマンドのスレッド

スレッド死ぬまで生きて間隔をおいてください

*必要に応じて、新しい、古いを置き換えることができます

飽和戦略:

*ブロッキング、削除、生産 - 実行など

複数のスレッドリアクター

*原子炉のプールを使用

CPUとIOのためのレートマッチング

静态的和动态的构建

*每一个都拥有自己的selector、线程、调度循环

主要的acceptor会分发(处理器)给其他的reactor;

 使用多Reactor

mainReactor理解成netty中的bossGroup(parentGroup)

subReactor理解成netty中的workGroup(childGroup)

 使用其他的NIO特性

*每个Reactor对应着多个selectors

将不同的处理器绑定到不同的IO事件。

需要一些同步来协调。

*文件传输

自动化的文件传输到网络或网络传输到文件的拷贝

*记忆映射文件

获取文件通过buffers

*Direct buffers

能够实现0拷贝传输

有些创建和结束

对于那些长连接它的效果是更好的

基于连接的扩展

*而不是单个服务请求

客户端连接

客户端发送一系列的信息和请求

客户端断开连接

例子:

数据库和事务的监控

 

对java的API进行一些说明:

 

 

おすすめ

転載: blog.csdn.net/qq_37909508/article/details/91355773