fd

不可思议的OOM

无人久伴 提交于 2020-03-22 03:10:17
本文发现了一类OOM(OutOfMemoryError),这类OOM的特点是崩溃时java堆内存和设备物理内存都充足,下文将带你探索并解释这类OOM抛出的原因。 关键词: OutOfMemoryError, OOM,pthread_create failede, Could not allocate JNI Env 一、引子 对于每一个移动开发者,内存是都需要小心使用的资源,而线上出现的 OOM(OutOfMemoryError)都会让开发者抓狂,因为我们通常仰仗的直观的堆栈信息对于定位这种问题通常帮助不大。网上有很多资料教我们如何“紧衣缩食“的利用宝贵的堆内存(比如,使用小图片,bitmap 复用等),可是: 线上的 OOM 真的全是由于堆内存紧张导致的吗? 有没有 App 堆内存宽裕,设备物理内存也宽裕的情况下发生 OOM 的可能? 内存充裕的时候出现 OOM 崩溃? 看似不可思议,然而,最近笔者在调查一个问题的时候,通过自研的 APM 平台发现公司的一个产品的大部分 OOM 确实有这样的特征,即: OOM 崩溃时,java 堆内存远远低于 Android 虚拟机设定的上限,并且物理内存充足,SD 卡空间充足 既然内存充足,这时候为什么会有 OOM 崩溃呢? 二、问题描述 在详细描述问题之前,先弄清楚一个问题: 什么导致了 OOM 的产生? 下面是几个关于 Android

Socket I/O模型全接触

◇◆丶佛笑我妖孽 提交于 2020-03-22 01:34:05
声明:除CSDN外的任何媒体转载必须注明作者以及“转载自CSDN”。 本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。 一:select模型 二:WSAAsyncSelect模型 三:WSAEventSelect模型 四:Overlapped I/O 事件通知模型 五:Overlapped I/O 完成例程模型 六:IOCP模型 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。 这和Socket模型非常类似。下面我就以老陈接收信件为例讲解Socket I/O模型~~~ 一:select模型 老陈非常想看到女儿的信。以至于他每隔10分钟就下楼检查信箱,看是否有女儿的信~~~~~ 在这种情况下,“下楼检查信箱”然后回到楼上耽误了老陈太多的时间,以至于老陈无法做其他工作。 select模型和老陈的这种情况非常相似:周而复始地去检查......如果有数据......接收/发送....... 使用线程来select应该是通用的做法: Code procedure TListenThread.Execute; var addr : TSockAddrIn; fd_ read : TFDSet; timeout : TTimeVal; ASock, MainSock : TSocket

QT 打开文件对话框总结

限于喜欢 提交于 2020-03-21 08:19:45
一: Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ", tr("Allfile(*.*);;mp3file(*.mp3)")); 说明:这样就会产生一个对话框,和系统的资源管理器差不多的。返回的是你选择文件的 绝对路径。 参数1:父窗口 参数2:对话框的标题 参数3:默认的打开的位置,如”我的文档“等 参数4:文件的过滤器,注意文件类型之间用 ;; 分开 二: QStringList fileNameList; QString fileName0; QFileDialog* fd = new QFileDialog(this);//创建对话框 fd->resize(240,320); //设置显示的大小 fd->setFilter( "Allfile(*.*);;mp3file(*.mp3);;wmafile(*.wma);;wavefile(*.wav)"); //设置文件过滤器 fd->setViewMode(QFileDialog::List); //设置浏览模式,有 列表(list) 模式和 详细信息(detail)两种方式 if ( fd->exec() == QDialog::Accepted ) //如果成功的执行 { fileName0 = fd-

三.Windows I/O模型之事件选择(WSAEventSelect )模型

隐身守侯 提交于 2020-03-19 02:52:28
1.事件选择模型:和异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型。事件选择模型和异步选择模型最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程。 2.创建事件对象:事件选择模型要求应用程序针对打算使用事件选择模型的每一个套接字,首先创建一个事件对象。创建方法是调用WSACreateEvent函数,它的定义如下:WSAEVENT WSACreateEvent(void); 3.绑定事件对象与套接字: int WSAEventSelect( SOCKET s, WSAEvent hEventObject, long lNetworkEvents//网络事件,就是异步选择中的网络事件,用法完全相同 ); 对于事件来说,他有两种类型,自动事件和人工事件。有两种状态,未触发状态和触发状态。使用WSACreateEvent函数创建的事件默认为人工事件且处于未触发状态。随着网络事件触发了与一个套接字关联在一起的事件对象,工作状态便会从未触发状态转变成触发状态。由于事件对象是在一种人工重设模式中创建的,所以在完成了一个I/O请求的处理之后,我们的应用程序需要负责将工作 状态触发状态更改未触发状态。 4.重置事件为未触发状态: BOOL

WinSock异步IO模型之Select

时光毁灭记忆、已成空白 提交于 2020-03-19 02:48:58
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。 Windows操作系统提供了五种I/O模型,分别是: ■ 选择(select); ■ 异步选择(WSAAsyncSelect); ■ 事件选择(WSAEventSelect); ■ 重叠I/O(Overlapped I/O); ■ 完成端口(Completion Port) 。 每一种模型适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确, 综合考虑到程序的扩展性和可移植性等因素,作出自己的选择。 ============================================== █ 选择(select)模型是Winsock中最常见的 I/O模型。核心便是利用 select 函数,实现对 I/O的管理! 利用 select 函数来判断某Socket上是否有数据可读,或者能否向一个套接字写入数据,防止程序在Socket处于阻塞模式中时, 在一次 I/O 调用(如send或recv、accept等)过程中,被迫进入“锁定”状态;同时防止在套接字处于非阻塞模 式中时,产生WSAEWOULDBLOCK错误。 █ select 的函数原型如下: int select( __in int nfds, __in_out fd_set* readfds, __in_out fd_set*

Select模型原理

不羁的心 提交于 2020-03-19 02:48:19
Select模型原理 利用select函数,判断套接字上是否存在数据,或者能否向一个套接字写入数据。目的是防止应用程序在套接字处于锁定模式时,调用recv(或send)从没有数据的套接字上接收数据,被迫进入阻塞状态。 select参数和返回值意义如下: int select ( IN int nfds, //0,无意义 IN OUT fd_set* readfds, //检查可读性 IN OUT fd_set* writefds, //检查可写性 IN OUT f d_set* exceptfds, //例外数据 IN const struct timeval* timeout); //函数的返回时间 struct timeval { long tv_sec; //秒 long tv_usec; //毫秒 }; select返回fd_set中可用的套接字个数。 fd_set是一个SOCKET队列,以下宏可以对该队列进行操作: FD_CLR( s, *set) 从队列set删除句柄s; FD_ISSET( s, *set) 检查句柄s是否存在与队列set中; FD_SET( s, *set )把句柄s添加到队列set中; FD_ZERO( *set ) 把set队列初始化成空队列. Select工作流程 1:用FD_ZERO宏来初始化我们感兴趣的fd_set。

Winsock IO模型之select模型

梦想的初衷 提交于 2020-03-19 02:47:42
之所以称其为select模型是因为它主要是使用select函数来管理I/O的。这个模型的设计源于UNIX系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字。 int select( int nfds, // 忽略,仅是为了与Berkeley套接字兼容 fd_set* readfds, // 指向一个套接字集合,用来检查其可读性 fd_set* writefds, // 指向一个套接字集合,用来检查其可写性 fd_set* exceptfds, // 指向一个套接字集合,用来检查错误 const struct timeval* timeout // 指定此函数等待的最长时间,如果为NULL,则最长时间为无限大 ); Select模型是最常见的I/O模型。 使用 int select( int nfds , fd_set FAR* readfds , fd_set FAR* writefds,fd_set FAR* exceptfds,const struct timeval FAR * timeout ) ; 函数来检查你要调用的Socket套接字是否已经有了需要处理的数据。 select包含三个Socket队列,分别代表: readfds ,检查可读性,writefds,检查可写性,exceptfds,例外数据。 timeout是select函数的返回时间

你可以这么理解五种I/O模型

北城余情 提交于 2020-03-19 02:35:48
因为项目需要,接触和使用了Netty,Netty是高性能NIO通信框架,在业界拥有很好的口碑,但知其然不知其所以然。 所以本系列文章将从基础开始学起,深入细致的学习NIO。本文主要是介绍五种I/O模型,概念是枯燥的,不过还是得理解才行。 LINUX与UNIX中一些概念 在网络管理,Linux UNIX很相似.UNIX系统一直被用做高端应用或服务器系统,因此拥有一套完善的网络管理机制和规则, Linux沿用了这些出色的规则,使网络的可配置能力很强,为系统管理提供了极大的灵活性. 通俗一点讲,就是在网络方面Linux和UNIX是非常相似的,网络模型大可借鉴UNIX网络编程中的描述。 这里介绍四个概念,方便五种I/O模型的理解: 1.所有外部设备皆文件 Linux的内核将所有的 外部设备都看作是一个文件 来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。 面对一个socket也会有相应的描述符,成为socketfd(socket描述符),描述符就是一个数字,他指向内核中的一个结构体(文件路径,数据区等一些属性)。 2.recvfrom()函数 ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, strut sockaddr *from,

第一部分:趣味算法入门;第六题牛顿迭代法求一元三次方程的根

随声附和 提交于 2020-03-18 01:12:03
100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力。 第一部分:趣味算法入门;第六题 ''' 6.牛顿迭代法求方程的根:方程为:ax**3 + bx**2 + cx + d = 0,系数a,b,c,d由主函数输入。 求x在1附近的一个实根。求出根后,由主函数输出。 牛顿迭代法的公式是:x = x0 - f(x0)/f'(x0) 设迭代到|x-x0|<=10**-5时结束。 ''' #解题方法示例如下; #输入方程的系数 a = int(input('请输入a的值:')) b = int(input('请输入b的值:')) c = int(input('请输入c的值:')) d = int(input('请输入d的值:')) #用牛顿迭代法求方程的根 x = 1.5 i =1 #随机定义一个i的值,是其能够进入while循环语句 while i >= 1e-5: #(1e-5 = 10**-5) x0 = x #用所得的x代替x0原来的值 f = ((a*x0+b)*x0+c)*x0 +d #f用来描述方程的值 fd = (3*a*x0 + 2*b)*x0 +c #fd用来描述方程求导之后的值 x = x0 - f/fd #求得更接近方程根的x的值 i = abs(x - x0) #输出所求方程的根 print('方程的一个根为:{

IO模型

房东的猫 提交于 2020-03-17 22:17:37
说实话 只是了解了几种io模型的基础知识 但实际上相关io模型的源码知识还有待进一步的学习 一、 IO 模型基本认知 BIO 里用户最关心 “ 我要读 ” , NIO 里用户最关心 ” 我可以读了 ” ,在 AIO 模型里用户更需要关注的是 “ 读完了 ” 下面引用知乎 一书焚城 的回答再次巩固一下 IO 模型 阻塞 IO , 给女神发一条短信, 说我来找你了, 然后就默默的一直等着女神下楼, 这个期间除了等待你不会做其他事情, 属于备胎做法. 非阻塞 IO , 给女神发短信, 如果不回, 接着再发, 一直发到女神下楼, 这个期间你除了发短信等待不会做其他事情, 属于专一做法. IO多路复用 , 是找一个宿管大妈来帮你监视下楼的女生, 这个期间你可以些其他的事情. 例如可以顺便看看其他妹子,玩玩王者荣耀, 上个厕所等等. IO复用又包括 select, poll, epoll 模式. 那么它们的区别是什么? 3.1 select大妈 每一个女生下楼 , select大妈都不知道这个是不是你的女神, 她需要一个一个询问, 并且select大妈能力还有限, 最多一次帮你监视1024个妹子 3.2 poll大妈 不限制盯着女生的数量 , 只要是经过宿舍楼门口的女生, 都会帮你去问是不是你女神 3.3 epoll大妈 不限制盯着女生的数量 , 并且也不需要一个一个去问. 那么如何做呢?