皮皮网

【源码安装坑】【nginx 源码 淘宝】【刷pv 源码】bio 源码

2024-11-23 12:39:43 来源:比特币场外源码

1.I/O 简要分析
2.这属于什么类型的文件?
3.求一个基于openssl写的ecc曲线的源代码
4.生物信息百Jia软件(二):fastp
5.Netty原理-从NIO开始

bio 源码

I/O 简要分析

       本文将从文件IO、网络IO和Java IO接口三个方面来分析IO操作。

       一、文件IO

       一般情况下,我们通过调用read/write接口来进行IO操作,这种操作被称为标准IO,源码安装坑其会先经过页面缓存提高性能。直接IO则会直接作用到磁盘,优点是减少数据拷贝和系统调用消耗,降低CPU使用率和内存占用。还有一种mmap方法,即将文件或对象映射到进程地址空间,减少一次数据拷贝和系统调用。nginx 源码 淘宝

       二、网络IO

       网络IO由Linux内核统一处理,包括socket读写、数据准备和数据复制两个阶段。网络IO模型包括同步阻塞、同步非阻塞、多路复用、信号驱动和异步IO。同步阻塞IO导致进程阻塞直到数据准备好。同步非阻塞IO则允许进程在等待数据时执行其他操作。多路复用IO则允许同时监听多个连接。信号驱动IO允许在数据准备时发送信号,刷pv 源码而异步IO允许在调用后直接获得结果。

       三、Java IO接口

       Java IO接口包括BIO(同步阻塞IO)、NIO(同步非阻塞IO)、AIO(异步非阻塞IO)和Okio。BIO使用InputStream/OutputStream进行IO操作,NIO基于多路复用原理,使用channel、selector和Buffer处理多个连接。AIO在NIO基础上实现数据准备和拷贝的异步操作。Okio是Java IO的封装和优化,提供Sink、tinymce 源码模式Source、TimeOut和Segment等核心类简化IO操作。

       总的来说,通过文件IO、网络IO和Java IO接口的不同模型,我们可以实现高效且灵活的IO操作。不同场景下选择合适的IO模型能够显著提高程序性能和效率。对于Okio的具体使用和详细架构,读者可以进一步探索其源码以深入了解。

这属于什么类型的文件?

       -- 常用文件扩展名解释

       A 对象代码库文件

       AAM Authorware shocked文件

       AAS Authorware shocked包

       ABF Adobe二进制屏幕字体

       ABK CorelDRAW自动备份文件

       ABS 该类文件有时用于指示一个摘要(就像在一篇有关科学方面的文章的一个摘要或概要,取自abstract)

       ACE Ace压缩档案格式

       ACL CorelDRAW 6键盘快捷键文件

       ACM Windows系统目录文件

       ACP Microsoft office助手预览文件

       ACR 美国放射医学大学文件格式

       ACT Microsoft office助手文件

       ACV OS/2的驱动程序,用于压缩或解压缩音频数据

       AD After Dark屏幕保护程序

       ADA Ada源文件(非-GNAT)

       ADB Ada源文件主体(GNAT);HPLX组织者的saltstack源码安装约定数据库

       ADD OS/2用于引导过程的适配器驱动程序

       ADF Amiga磁盘文件

       ADI AutoCAD设备无关二进制绘图仪格式

       ADM After Dark多模块屏幕保护;Windows NT策略模板

       ADP FaxWork用于传真调制解调器的交互安装文件;Astound Dynamite文件

       ADR After Dark随机屏幕保护;Smart Address的地址簿

       ADS Ada源文件说明书(GNAT)

       AFM Adobe的字体尺度

       AF2,AF3 ABC的FlowChat文件

       AI Adobe Illustrator格式图形

       AIF,AIFF 音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式

       AIFC 压缩AIF

       AIM AOL即时信息传送

       AIS ACDSee图形序列文件;Velvet Studio设备文件

       AKW RoboHELP的帮助工程中所有A-关键词

       ALAW 欧洲电话音频格式

       ALB JASC Image Commander相册

       ALL 艺术与书信库

       AMS Velvet Studio音乐模块(MOD)文件;Extreme的Tracker模块文件

       ANC Canon Computer的调色板文件,包含一系列可选的颜色板

       ANI Windows系统中的动画光标

       ANS ANSI文本文件

       ANT SimAnt For Windows中保存的游戏文件

       API Adobe Acrobat使用的应用程序设计接口文件

       APR Lotus Approach 文件

       APS Microsoft Visual C++文件

       ARC LH ARC的压缩档案文件

       ARI Aristotle声音文件

       ARJ Robert Jung ARJ压缩包文件

       ART Xara Studio绘画文件;Canon Crayola美术文件;Clip Art文件格式;另一种光线跟踪格式;AOL使用的用Johnson―Grace压缩算法压缩的标记文件

       ASA Microsoft Visual InterDev文件

       ASC ASCⅡ文本文件;PGP算法加密文件

       ASD Microsoft Word的自动保存文件;Microsoft高级流媒体格式(microsoft advanced streaming FORMat,ASF)的描述文件;可用NSREX打开 Velvet Studio例子文件

       ASE Velvet Studio采样文件

       ASF Microsoft高级流媒体格式文件

       ASM 汇编语言源文件,Pro/E装配文件

       ASO Astound Dynamite对象文件

       ASP 动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件

       AST Astound多媒体文件;ClarisWorks“助手”文件

       ASV DataCAD自动保存文件

       ASX Cheyenne备份脚本文件;Microsoft高级流媒体重定向器文件,视频文件

       ATT AT< Group 4位图文件

       ATW 来自个人软件的Any Time Deluxe For Windows个人信息管理员文件

       AU Sun/NeXT/DEC/UNIX声音文件;音频U-Law(读作“mu-law”)文件格式

       AVB Computer Associates Inoculan反病毒软件的病毒感染后文件

       AVI Microsoft Audio Video Interleave**格式

       AVR Audio Visual Research文件格式

       AVS 应用程序可视化格式

       AWD FaxVien文档

       AWR Telsis数字储存音频文件扩展名格式

       Axx ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取-的数字)

       A3L Authorware 3.x库文件

       A4L Authorware 4.x库文件

       A5L Authorware 5.x库文件

       A3M,A4M Authorware Macintosh未打包文件

       A4P Authorware无运行时间的打包文件

       A3W,A4W,A5W 未打包的Authorware Windows文件

       BAK 备份文件

       BAS BASIC源文件

       BAT 批处理文件

       BDF West Point Bridger Designer文件

       BFC Windows Briefcase文档

       BG Backgammon For Windows下的游戏文件

       BGL Microsoft Flight Simulator(微软飞行模拟器)的视景文件

       BI 二进制文件

       BIF Group Wise的初始化文件

       BIFF XLIFE 3D格式文件

       BIN 二进制文件

       BK,BK$ 有时用于代表备份版本

       BKS IBM BookManager Read书架文件

       BMK 书签文件

       BMP Windows或OS/2位图文件

       BMI Apogee BioMenace数据文件

       BOOK Adobe FrameMaker Book文件

       BOX Lotus Notes的邮箱文件

       BPL Borlard Delph 4打包库

       BQY BrioQuery文件

       BRX 用于查看多媒体对象目录的文件

       BSC MS Developer Studio浏览器信息文件

       BSP Quake图形文件

       BS1 Apogee Blake Stone数据文件

       BS_ Microsoft Bookshelf Find菜单外壳扩展名

       BTM Norton 应用程序使用的批处理文件

       BUD Quicken的备份磁盘

       BUN CakeWalk 声音捆绑文件(一种MIDI程序)

       BW SGI黑白图像文件

       BWV 商业波形文件

       BYU BYU的**文件格式

       B4 Helix Nuts and Bolts文件

       C C代码文件

       C0l 台风波形文件

       CAB Microsoft压缩档案文件

       CAD Softdek的Drafix CAD文件

       CAL CALS压缩位图;日历计划表数据

       CAM Casio照相机格式

       CAP 压缩音乐文件格式

       CAS 逗号分开的ASCⅡ文件

       CAT Quicken使用 的IntellCharge分类文件

       CB Microsoft干净引导文件

       CBI 二进制卷格式文件(用于IBM大型机系统)

       CC Visual dBASE用户自定义类文件

       CCA cc:邮件文件

       CCB Visual Basic动态按钮配置文件

       CCF 多媒体查看器配置文件,用于OS/2

       CCH Corel图表文件

       CCM Lotus cc:邮箱(例如“INBOX.CCM”)

       CCO CyberChat数据文件

       CCT Macromedia Director Shockwave投影

       CDA CD音频轨道

       CDF Microsoft频道定义格式文件

       CDI Philip的高密盘交互格式

       CDM Visual dBASE自定义数据模块文件

       CDR CorelDRAW绘图文件;原始音频CD数据文件

       CDT CorelDRAW模板

       CDX CorelDRAW压缩绘图文件;Microsoft Visual FoxPro索引文件

       CEL CIMFast事件语言文件

       CER 证书文件(MIME x-x-ca-cert)

       CFB Compton的多媒文件

       CFG 配置文件

       CFM CotdFusion模板文件;Visual dBASE Windows用户定制表单

       CGI 公共网关接口脚本文件

       CGM 计算机图形元文件

       CH OS/2配置文件

       CHK 由Windows磁盘碎片整理器或磁盘扫描保存的文件碎片

       CHM 编译过的HTML文件

       CHR 字符集(字体文件)

       CHP Ventura Publisher章节文件

       CHT ChartViem文件;Harvard Graphics矢量文件

       CIF Adaptec CD 创建器 CD映像文件

       CIL Clip Gallery下载包

       CIM SimCity 文件

       CIN OS/2改变控制文件用于跟踪INI文件中的变化

       CK1 iD/Apogee Commander Keen 1数据文件

       CK2 iD/Apogee Commander Keen 2数据文件

       CK3 iD/Apogee Commander Keen 3数据文件

       CK4 iD /Apogee Commander Keen 4数据文件

       CK5 iD /Apogee Commander Keen 5数据文件

       CK6 iD /Apogee Commander Keen 6数据文件

       CLASS Java类文件

       CLL Crick Software Clicker文件

       CLP Windows 剪贴板文件

       CLS Visual Basic类文件

       CMD Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件

       CMF Corel元文件

       CMG Chessmaster保存的游戏文件

       CMP JPEG位图文件;地址文档

       CMV Corel Move动画文件

       CMX Corel Presentation Exchange图像

       CNF Telnet,Windows和其他其内格式会发生改变的应用程序使用的配置文件

       CNM Windows应用程序菜单选项和安装文件

       CNQ Compuworks Design Shop文件

       CNT Windows(或其他)系统用于帮助索引或其他目的内容文件

       COB TrueSpace 2对象文件

       COD Microsoft C编译器产生的可显示机器码/汇编代码文件,其中附有源C代码作为注释

       COM 命令文件(程序)

       CPD Corel Print Office文件(图形)

       CPD,CPE 传真覆盖文档

       CPI Microsoft MS-DOS代码页信息文件

       CPL 控制面板扩展名,Corel颜色板

       CPO Corel打印存储文件

       CPP C++代码文件

       CPR Corel提供说明书文件

       CPT Corel 照片-绘画图像

       CPX Corel Presentation Exchange压缩图形文件

       CRD Windows Cardfile文件

       CRP Corel 提供的运行时介绍文件;Visual dBASE自定义报表文件

       CRT 认证文件

       CSC Corel脚本文件

       CSP PC Emcee On_Screen图像

       CSS 瀑布式表格文件

       CST Macromedia Director Cast文件

       CSV 逗号分隔的值文件

       CT Scitex CT位图文件;Paint Shop Pro Grapic编辑器文件

       CTL 通常用于表示一个包含控件信息的文件;FaxWork用它来保持有关每个传真收到或发出的信息

       CUE Microsoft提示牌数据文件

       CUR Windows光标文件

       CUT Dr Halo位图文件

       CV Corel版本的档案文件;Microsoft CodeView信息屏幕文件

       CWK ClarisWorks数据文件.

       CWS ClarisWorks模块

       CXT Macromedia Director受保护的(不可编辑的)投影文件

       CXX C++源代码文件

       --------------------------------------------------------------------------------

       -- 作者:ray

       -- 发布时间:-- ::

       --

       DAT 数据文件;WrodPerfect合并数据文件;用于一些MPEG格式的文件

       DB Borland的Paradox 7表

       DBC Microsoft Visual FoxPro数据库容器文件

       DBF dBASE文件,一种由Ashton-Tate创建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 打开);Oracle 8.1.x表格空间文件

       DBX DataBearn图像;Microsoft Visual FoxPro表格文件

       DCM DCM模块格式文件

       DCR 冲击波文件

       DCS 桌面颜色分隔文件

       DCT Microsoft Visual FoxPro数据库容器

       DCU Delphi编译单元文件

       DCX Microsoft Visual FoxPro数据库容器;基于PCX的传真图像;宏

       DC5 DataCAD绘图文件

       DDF Btrieve或Xtrieve数据定义文件,它包含用于描述Btrieve或Xtrieve文件的元数据

       DDIF Digital Equipment或 Compaq格式,用于保存他们图像与字处理文档

       DEF SmartWareⅡ数据文件;C++模块定义文件

       DEFI Oracle 7 卸载脚本文件

       DEM 用于表示数字高度模型的USGS基准的文件

       DER 认证文件

       DEWF Macintosh Sound Cap/Sound Edit录音设备格式

       DGN Macintosh CAD绘图文件

       DIB 设备无关位图

       DIC 目录

       DIF 可进行数据互换的电子表格

       DIG DigiLink格式;Sound DesignerⅠ音频文件

       DIR MacromediaDirector文件

求一个基于openssl写的ecc曲线的源代码

       下面的例子生成两对ECC密钥,并用它做签名和验签,并生成共享密钥。

       #include <string.h>

       #include <stdio.h>

       #include <openssl/ec.h>

       #include <openssl/ecdsa.h>

       #include <openssl/objects.h>

       #include <openssl/err.h>

       int main()

       {

        EC_KEY *key1,*key2;

        EC_POINT *pubkey1,*pubkey2;

        EC_GROUP *group1,*group2;

        int ret,nid,size,i,sig_len;

        unsigned char*signature,digest[];

        BIO *berr;

        EC_builtin_curve *curves;

        int crv_len;

        char shareKey1[],shareKey2[];

        int len1,len2;

        /* 构造EC_KEY数据结构 */

        key1=EC_KEY_new();

        if(key1==NULL)

        {

        printf("EC_KEY_new err!\n");

        return -1;

        }

        key2=EC_KEY_new();

        if(key2==NULL)

        {

        printf("EC_KEY_new err!\n");

        return -1;

        }

        /* 获取实现的椭圆曲线个数 */

        crv_len = EC_get_builtin_curves(NULL, 0);

        curves = (EC_builtin_curve *)malloc(sizeof(EC_builtin_curve) * crv_len);

        /* 获取椭圆曲线列表 */

        EC_get_builtin_curves(curves, crv_len);

        /

*

        nid=curves[0].nid;会有错误,原因是密钥太短

        */

        /* 选取一种椭圆曲线 */

        nid=curves[].nid;

        /* 根据选择的椭圆曲线生成密钥参数group */

        group1=EC_GROUP_new_by_curve_name(nid);

        if(group1==NULL)

        {

        printf("EC_GROUP_new_by_curve_name err!\n");

        return -1;

        }

        group2=EC_GROUP_new_by_curve_name(nid);

        if(group1==NULL)

        {

        printf("EC_GROUP_new_by_curve_name err!\n");

        return -1;

        }

        /* 设置密钥参数 */

        ret=EC_KEY_set_group(key1,group1);

        if(ret!=1)

        {

        printf("EC_KEY_set_group err.\n");

        return -1;

        }

        ret=EC_KEY_set_group(key2,group2);

        if(ret!=1)

        {

        printf("EC_KEY_set_group err.\n");

        return -1;

        }

        /* 生成密钥 */

        ret=EC_KEY_generate_key(key1);

        if(ret!=1)

        {

        printf("EC_KEY_generate_key err.\n");

        return -1;

        }

        ret=EC_KEY_generate_key(key2);

        if(ret!=1)

        {

        printf("EC_KEY_generate_key err.\n");

        return -1;

        }

        /* 检查密钥 */

        ret=EC_KEY_check_key(key1);

        if(ret!=1)

        {

        printf("check key err.\n");

        return -1;

        }

        /* 获取密钥大小 */

        size=ECDSA_size(key1);

        printf("size %d \n",size);

        for(i=0;i<;i++)

        memset(&digest[i],i+1,1);

        signature=malloc(size);

        ERR_load_crypto_strings();

        berr=BIO_new(BIO_s_file());

        BIO_set_fp(berr,stdout,BIO_NOCLOSE);

        /* 签名数据,本例未做摘要,可将digest中的数据看作是sha1摘要结果 */

        ret=ECDSA_sign(0,digest,,signature,&sig_len,key1);

        if(ret!=1)

        {

        ERR_print_errors(berr);

        printf("sign err!\n");

        return -1;

        }

        /* 验证签名 */

        ret=ECDSA_verify(0,digest,,signature,sig_len,key1);

        if(ret!=1)

        {

        ERR_print_errors(berr);

        printf("ECDSA_verify err!\n");

        return -1;

        }

        /* 获取对方公钥,不能直接引用 */

        pubkey2 = EC_KEY_get0_public_key(key2);

        /* 生成一方的共享密钥 */

        len1=ECDH_compute_key(shareKey1, , pubkey2, key1, NULL);

        pubkey1 = EC_KEY_get0_public_key(key1);

        /* 生成另一方共享密钥 */

        len2=ECDH_compute_key(shareKey2, , pubkey1, key2, NULL);

        if(len1!=len2)

        {

        printf("err\n");

        }

        else

        {

        ret=memcmp(shareKey1,shareKey2,len1);

        if(ret==0)

        printf("生成共享密钥成功\n");

        else

        printf("生成共享密钥失败\n");

        }

        printf("test ok!\n");

        BIO_free(berr);

        EC_KEY_free(key1);

        EC_KEY_free(key2);

        free(signature);

        free(curves);

        return 0;

       }

生物信息百Jia软件(二):fastp

       在众多序列质控过滤软件中,fastp凭借其卓越的性能和易用性脱颖而出。这款由中国深圳海普洛斯公司陈实富开发的软件,不仅功能全面,且操作简便,已经能满足大部分数据处理需求。它的亮点包括:一次性处理数据,涵盖低质量过滤、adapter去除、reads截取和大文件分割等操作;支持长读序列,适用不同测序平台如Pacbio和IonTorrent;并能直接输出质控和统计报告,格式包括json和html。fastp以高效的C++编写,执行速度极快。

       安装和使用方面,fastp提供了多种选项。可以通过源代码安装和编译预编译版本。输入和输出文件通过-i和-o指定,注意输出文件可能需要加上.gz扩展名。质量体系选择、压缩格式、adapter处理、reads截取、质量过滤(包括Q值、百分比和N碱基过滤)以及reads长度控制等功能一应俱全。此外,还支持json和html格式的报告输出,以及线程使用和大文件分割处理等高级选项。

       实例应用中,fastp的便捷性和灵活性使其在实际序列分析中大显身手,无论是数据预处理还是生成详细报告,都能轻松应对。无疑,fastp是生物信息学领域值得信赖的工具之一。

Netty原理-从NIO开始

       Netty是基于NIO的异步通信框架(曾经引入过AIO,后来放弃),故要说Netty原理我们要先从NIO开始。

        NIO 是JAVA在JDK4中引入的同步非阻塞通信模型,在NIO出现之前(JDK4之前)市场上只有一个BIO模型顾名思义BLOCKING IO (同步阻塞通信模型)

        BIO(BLOCKING I/O):

        BIO 为一个连接 一个线程的模式,当有连接时服务器会开启一个线程来处理请求

        若此请求啥都不想干此时线程会怎么样?

        此线程会进入阻塞模式(BLOCKING)!---啥也不干,干等着zzZZ~

        这种一连接,一线程的模式会造成服务器资源不必要的开销并且在大量连接访问时 服务器会发生什么?车道(线程)不足,车太多--我堵车了

        由此就出现了NIO

        ↓

        NIO(new/NONBLOCKING I/O):

        NIO为同步非阻塞通信模型,Select(多路复用器)为此模型的核心,实现了多个连接一个线程

        当有客户端连接请求时 此连接请求会被注册至select上,当select检测到此连接有I/O请求时才会打开一个线程去对此I/O请求进行处理-----单线程模型

        这个时候有人问了:这么多操作都在一个线程里,线程忙不过来怎么办?

        此时 由于网络请求、I/O读写、业务操作都在一个线程下,会导致在高并发的情况下存在性能瓶颈 于是乎有人就提出来 将业务操作丢到另一个线程怎么样?

        于是出现了第三种reactor模型-使用线程池进行操作网络请求、IO在一个线程,业务操作在另个一个线程 的业务分离----线程池模型

        从此图中可以看出此时 模型中使用一个线程池来进行网络请求、IO读取

        当读取完成后将业务操作绑定在线程池中另外的线程上-------网络IO与业务操作可以同步进行了!一切都完美了起来!

        但是!事情还没完!!这个时候又有人提出问题:在高并发的时候咋办?会不会有性能瓶颈

        因为网络IO是非常消耗CPU的,当网络请求与网络IO在同个线程中时,造CK的情况下单个线程并不足以支撑起所有的IO操作!因此也形成了在高并发状态下的性能瓶颈

        于是大佬们就想着,如果把IO拆出来让单个线程池去接收网络请求,用另一个线程池来进行IO与业务操作会不会更好

        于是第四种Reactor模型应运而生--主从Reactor多线程模型

        此模型中 mainReactor只用于接收网络请求,而subReactor中为一个线程池,线程池中每个线程上绑定一个select

        当mainReactor接收到请求时(一个描述符) 系统会生成一个新的描述符代表此连接生效,此时mainReactor会将新的描述符通过一个算法在线程池中选定一个线程 将此描述符绑定至此线程池上的select上,由此线程来对请求进行I/O 与业务操作

        从此百万连接高并发不是问题

        写到这 我们是不是想起了Netty的启动过程

        1、声明两个EventLoopGroup一个为boss(mainReactor)一个为worker(subReactor)

        EventLoopGroup(线程池)初始化的时候会生成(懒加载)指定数量的EventLoop(线程)若无指定 则会生成CPU数X2的线程

        2、声明一个启动辅助类Bootstrap并将EventLoopGroup注册到启动辅助类BootStrap上(bootStrap.group)

        接着再给bootstrap指定channel模型等属性,再添加上业务流水线(channelpipeline)并且在pipeline中添加上业务操作handler,(通过channelpipeline可以对传入数据为所欲为)

        3、绑定端口

        Netty启动完成

        这时候可能有人会问了:这和你上面说的reactor?NIO有啥关系?

        这个时候我们要这么看

        ↓

        若我们将boss与worker线程池设置为相同的一个线程池,那么会发生什么事?

        此时关注一下第三个Reactor模型时就会发现 当BOSS=WORKER时候 netty实现的就是第三种Reactor模型 使用线程池模型

        而当boss不等于worker的时候使用的就是第四种 主从多线程模型

        Netty就是基于Reactor模型来对NIO进行了易用化封装,从Netty源码中就可以看出来其实底层还都是NIO的接口

        此次处为自己读源码之后的理解 如有误请指正

        感恩

        反手拿下第一个赞