Javaの基本的な4の小さなドングリからオークス

 1.JAVA I / Oストリームの分類

  • 按照流的流向分,可以分为输入流和输出流;
    按照操作单元划分,可以划分为字节流和字符流;
    按照流的角色划分为节点流和处理流。复制代码

実際には、文字入力、文字出力、入力バイトに簡単な入力と出力に応じて、4バイトの出力親クラスは、バッファフロー、データフローのように、オブジェクトのストリームは、これらの4つのカテゴリーに変更されます。(:、出力としてメモリ書き込み動作にプログラムを読み込む入力に外部ファイルとしてみなさプログラムプログラムへの入力と出力の相対的なものについての入力および出力は、相対的であり、我々が話しているその注目に値します)

この記事では、ストリーム全体システムの非常に明確な説明である、を参照してください。github.com/Snailclimb / ...

2.文字ストリームとバイトストリームを使用しますか?

非テキストファイル、入力および出力テキストファイルの文字ストリームの入力および出力バイトストリーム; O効率を向上させるが、入力および出力を実装する際にも起因するフロー8192byteデフォルトのバッファサイズ、の存在のために、出力ストリームに一致するバッファリングされた入力を生成するために、ディスクとの直接接触を減らし、CPU効率を大幅に向上させる、それが全体的に、より迅速になります。

3.パイプ流とは何ですか?

たPipedInputStream、PipedOutputStreamの、PipedReaderとPipedWriter:データの相互作用を達成するための2つのスレッドが、4つのパイプラインの流れがあります。これらのデータは、2つのスレッドが実行されている間にストリーミングするために非常に有用であろう。

注意:  

管道流仅用于两个及以上个线程之间的数据交互,若用在同一个线程中可能会造成死锁;
管道流的输入输出是成对的,一个输出流只能对应一个输入流,使用构造函数或者connect函数进行连接;
一对管道流包含一个缓冲区,其默认值为1024个字节,若要改变缓冲区大小,可以使用带有参数的构造函数;
管道的读写操作是互相阻塞的,当缓冲区为空时,读操作阻塞;当缓冲区满时,写操作阻塞;
管道依附于线程,因此若线程结束,则虽然管道流对象还在,仍然会报错“read dead end”;
管道流的读取方法与普通流不同,只有输出流正确close时,输出流才能读到-1值。 复制代码

この記事では、パイプラインの流れは、を参照してくださいことを非常に明確である:blog.csdn.net/jijianshuai ...

4. I / Oモデルは何ですか?

BIO  モデル:同期ブロッキングI / Oモードは、読み出したデータは、スレッド内でその完了を待ってブロックされるように書かれています。BIOソケット・プログラミング・モデルを使用する場合、サーバは、通常、プロセス全体が線形である要求が受信され、処理が適切に復帰するまでのループは、クライアント要求がない場合、方法ブロックを受け入れるながらメソッドが呼び出され受け入れます唯一の現在のリクエストの処理要求を処理した後にのみ、これは通常、通信スレッドが長時間ブロックされ、その結果、戻って受け入れられます。

NIOモデル  パッケージをjava.nioで対応するJava 1.4 NIOフレームに導入された同期のノンブロッキングI / Oモデル、提供チャンネル、セレクタ、バッファ、他の抽象クラス。NIO Nは、ノンブロッキングではなく、単に新しいものとして理解することができます。

AIOモデル:非同期非ブロッキングIOモデルは、Javaの7 NIO 2にNIOの改良版を導入しました。非同期IOを達成するために、イベント及びコールバック機構に基づいている、つまり、操作のアプリケーションに直接返されます後、バックグラウンド処理が完了すると、オペレーティングシステムは後続の動作のために適切なスレッドに通知し、そこに接続しないであろう。

I / Oモデルの詳細は、後述するより詳細に記載されている学ぶ(後の任意の存在する場合)

基本的な手順5.I / O操作

1.新しいファイルオブジェクトを作成します。

操作の2.ファイルタイプ

3.文書の具体的な動作

4.ファイルを閉じます

public void testFileReder()  {
        FileReader fr = null;
        try {
//        File类的实例化
            File file = new File("poety");
//        FileReader实例化
            fr = new FileReader(file);
//        读入操作
            char [] chars = new char[80];
            int len ;
            if(( len =fr.read(chars))!= -1){
                for (int i = 0; i <len ; i++) {
                    System.out.print(chars [i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //        关闭流
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }复制代码

6.IOチューニング 

ディスクIOの最適化 

パフォーマンステスト

1 我们可以压测应用,看看IO的wait指标是否正常。Linux下可以通过iostat查看IO状态;
2 IOPS是IO性能的重要参数,要看看最低的IOPS是多少;
IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。存储端的IOPS性能和主机端的IO是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次IO需要多次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过“发送写入请求、写入数据、收到写入确认”等三个步骤,也就是3个存储端访问。
3 RAID技术可以提升磁盘IO性能。每种RAID方案对IO性能提升不同,可以用raid因子来表示。复制代码

IO性能のアップグレード

1 增加缓存;
2 优化磁盘管理系统,寻址策略,非常底层;
3 设计索引,异步和非阻塞加快磁盘访问
4 使用raid.复制代码

1 raid0平均写到多个磁盘阵列,读写都是并行的,速度翻倍;
2 raid1实现了数据备份;
3 raid5是0和1的折中,平均读写,但是留一盘用来备份和恢复;
4 raid0+1.复制代码

 TCPネットワークパラメータの最適化

1 端口号有65536个;

2 可用端口号不足时遇到大量并发请求时会成为瓶颈,大量请求等待建立连接;

如果出现大量time wait,可以设置timewait时间为更小值;

3 通过ab压测,发现time wait的连接很多,降低timeout时延,则timewait数量明显减少;

4 除了增大端口范围外,还可以让TCP连接复用等方式来提高性能。复制代码

  IOネットワークの最適化 1

1 减少网络交互次数可以合并多个请求为一个请求
2 减少网络传输数据量大小压缩数据,尽量通过协议头来获取信息,设置使用代理时只判断协议头即可完成请求或者负载均衡。
3 尽量减少编码直接使用字节流传输,减少了一次解码过程
4 IO方式 复制代码

1 同步和异步同步就是前后任务依次完成,互相依赖,异步则不依赖其他任务;
2 阻塞和非阻塞阻塞和非阻塞主要和cpu有关,阻塞会切换cpu上下文,非阻塞则不会。复制代码

:IOチューニングこのセクションでは、から来ている著作権:この記事は元の記事CSDNブロガー「黄斜め」、フォローのCC 4.0 BY-SAの著作権契約、複製、元のソースのリンクと、この文を添付してくださいです。オリジナルリンク:blog.csdn.net/a724888/art ...


おすすめ

転載: juejin.im/post/5db44ee66fb9a020636997d4