handler

deferred work

落爺英雄遲暮 提交于 2020-02-03 03:02:27
背景信息 延期工作是内核的一个特色,用于在随后的某个时间执行某个代码。这个被预定的代码可以运行在进程上下文或者中断上下文。延期工作被用于完成中断处理功能因为中断拥有重要的要求和限制如下: 中断处理程序的执行时间要尽可能地小 在中断上下文中不能够使用导致阻塞的调用 使用延期工作 Softirqs softirqs不能够被设备驱动使用,他们被保留用于多种多样的内核子系统。因为固定数目的softirqs被在编译时被定义。 HI_SOFTIRQ and TASKLET_SOFTIRQ - running tasklets TIMER_SOFTIRQ - running timers NET_TX_SOFIRQ and NET_RX_SOFTIRQ - used by the networking subsystem BLOCK_SOFTIRQ - used by the IO subsystem BLOCK_IOPOLL_SOFTIRQ - used by the IO subsystem to increase performance when the iopoll handler is invoked; SCHED_SOFTIRQ - load balancing HRTIMER_SOFTIRQ - implementation of high precision timers RCU

Netty剖析之Netty线程模型

谁都会走 提交于 2020-02-02 23:48:45
线程模型基本介绍 不同的线程模式,对程序的性能有很大影响,为了搞清Netty线程模式,下面我们来系统的讲解下各个线程模式。 目前存在的线程模型有: 传统阻塞IO服务模型 Reactor 模式,根据 Reactor 的数量和处理资源池线程的数量不同,有3种典型的实现: 2.1 单Reactor单线程 2.2 单Reactor多线程 2.3 主从Reactor多线程 Netty线程模式(Netty主要基于主从Reactor多线程模型做了一定的改进,其中主从Reactor多线程模型有多个 Reactor) 传统阻塞IO服务模型 示意图: 模型特点: 采用阻塞IO模式获取输入的数据 每个连接都需要独立的线程完成数据的输入,业务处理,数据返回 问题分析: 当并发数很大,就会创建大量的线程,占用很大系统资源 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read操作,造成线程资源浪费 Reactor模式 针对传统阻塞IO服务模型的2个缺点,产生了如下解决方案: 基于IO复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理 基于线程池复用线程资源:不必再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。

springMVC执行流程

天大地大妈咪最大 提交于 2020-02-02 08:17:57
刚学习springMVC,现总结一下其执行流程如下: 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping(处理器映射器)查找Handler,如果设置有拦截器,也会查找对应的handler 可以根据xml配置、注解进行查找 第三步:处理器映射器HandlerMapping向前端控制器返回Handler 第四步:前端控制器调用处理器适配器(HandlerAdaptor)去执行Handler 第五步:处理器适配器执行Handler; 第六步:Handler执行完成后给适配器返回ModelAndView; 第七步:处理器适配器向前端控制器返回ModelAndView ModelAndView是springmvc框架的一个底层对象,包括Model和View 第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析 根据逻辑视图名解析成真正的视图(jsp) 第九步:视图解析器向前端控制器返回View 第十步:前端控制器进行视图渲染 视图渲染将模型数据(在ModelAndView对象中)填充到request域中 第十一步:前端控制器向用户响应结果 重要组件: 1、前端控制器DispatcherServlet(不需要程序员开发) 作用:接收请求,响应结果,相当于转发器,减少了其它组件之间的耦合度 2

ES6 Proxy

久未见 提交于 2020-02-02 08:13:11
概述 proxy是在目对象前架设一个“拦截”层,外界对该对象的访问都必须先通过这层拦截,因此提供了一种机制可以对外界的访问进行过滤和改写。 var obj = new Proxy({}, { get: function (target, propKey, receiver) { console.log(`getting ${propKey}!`); return Reflect.get(target, propKey, receiver); }, set: function (target, propKey, value, receiver) { console.log(`setting ${propKey}!`); return Reflect.set(target, propKey, value, receiver); } }); obj.count = 1 // setting count! ++obj.count // getting count! // setting count! // 2 ES6 原生提供 Proxy 构造函数,用来生成 Proxy 实例。 var proxy = new Proxy(target, handler); Proxy 对象的所有用法,都是上面这种形式,不同的只是 handler 参数的写法。 target 参数表示所要拦截的目标对象,

session放入缓存(redis)、DB

情到浓时终转凉″ 提交于 2020-02-02 03:22:40
为什么要把SESSION保存在缓存   就php来说,语言本身支持的session是以文件的方式保存到磁盘文件中,保存在指定的文件夹中,保存的路径可以在配置文件中设置或者在程序中使用函数session_save_path()进行设置,但是这么做有弊端, 第一就是保存到文件系统中,效率低,只要有用到session就会从好多个文件中查找指定的sessionid,效率很低。 第二就是当用到多台服务器的时候可能会出现,session丢失问题(其实是保存在了其他服务器上)。   当然了,保存在缓存中可以解决上面的问题,如果使用php本身的session函数,可以使用session_set_save_handler()函数很方便的对session的处理过程进行重新控制。如果不用php的session系列函数,可以自己编写个类似的session函数,也是可以的,我现在做的这个项目就是这样,会根据用户的mid、登录时间进行求hash作为sessionId,每次请求的时候都必须加上sessionId才算合法(第一次登录的时候是不需要的,这个时候会创建sessionId,返回给客户端),这么做也很方便、简洁高效的。当然了,我这篇文章主要说的是在php自身的SESSION中”做做手脚”。 SESSION保存在缓存中   php将缓存保存到redis中,可以使用配置文件,对session的处理和保存做修改

互操作

与世无争的帅哥 提交于 2020-02-01 11:03:15
>>返回《C# 并发编程》 1. 用 async 代码封装异步方法与 Completed 事件 2. 用 async 代码封装 Begin/End 方法 3. 用 async 代码封装并行代码 4. 用 async 代码封装 Rx Observable 对象 5. 用 Rx Observable 对象封装 async 代码 6. Rx Observable 对象和数据流网格 异步封装 1. 用 async 代码封装异步方法与 Completed 事件 public static void MyDownloadStringTaskAsyncRun() { WebClient client = new WebClient(); string res = client.MyDownloadStringTaskAsync(new Uri("http://www.baidu.com")).Result; System.Console.WriteLine(res); } public static Task<string> MyDownloadStringTaskAsync(this WebClient client, Uri address) { var tcs = new TaskCompletionSource<string>(); // 这个事件处理程序会完成 Task 对象

Android Studio:Unable to add window android.view.ViewRootImpl$W@5e2d85a -- permission denied for this window 第一行代码

筅森魡賤 提交于 2020-02-01 08:56:36
学习《第一行代码》的时候,出现的错误。 java.lang.RuntimeException: Unable to start receiver com.example.sevenun.littledemo.receiver.ForceOfflineReceiver: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@5e2d85a -- permission denied for this window type at android.app.ActivityThread.handleReceiver(ActivityThread.java:2732) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app

Android 插件化原理及实践

不问归期 提交于 2020-02-01 08:46:14
概述 插件化是一个非常大的话题,他包含很多的知识点,我们今天简单的学习一下他的原理,并且从零开始实现插件化,这里主要用到了 Hook技术 关联文章 Android APK资源加载流程 Android 中的ClassLoader Android App启动过程 Android 热修复原理实战 设计模式 – 代理模式 插件化需要解决的问题和技术 Hook技术 插件的类加载 插件的资源加载 启动插件Activity Hook技术 如果我们自己创建代理对象,然后把原始对象替换为我们的代理对象(劫持原始对象),那么就可以在这个代理对象为所欲为了,修改参数,替换返回值,我们称之为 Hook 。 我们可用用 Hook 技术来劫持原始对象,被劫持的对象叫做 Hook 点,什么样的对象比较容易 Hook 呢?当然是 单例和静态对象 ,在一个进程内单例和静态对象不容易发生改变,用代理对象来替代 Hook 点,这样我们就可以在代理对象中实现自己想做的事情,我们这里 Hook 常用的 startActivity 方法来举例 对于 startActivity 过程有两种方式: Context.startActivity 和 Activity.startActivity 。这里暂不分析其中的区别,以 Activity.startActivity 为例说明整个过程的调用栈。 Activity 中的

开迅科技 Android面试总结

我的未来我决定 提交于 2020-02-01 06:17:02
公司介绍 开迅科技主要的产品有2个,开迅视频与触手TV,开迅视频是一款中国领先的移动视频播放平台,而触手TV是一款在线直播的手游直播APP,拥有广阔的发展前景, 在第一次观看手游直播,就被风趣的主播所吸引~ 我知道的就这么多啦== 应聘岗位 Android开发 面试过程 前一天约定下午3点面试,由于住在滨江,2点就驱车前往,幸好提前去,不然又要堵车迟到,过去的隧道真心堵啊。 到了公司,是文萍姐(HR)带我到会议室,等待着技术大大的考验,心情忐忑啊 ==|| 过了会技术大大来了,拿着我的简历进来了, 开始蛮紧张的,但是让我做下自我介绍, 幸好之前有准备,这里有2个注意点,就是简历的工作经历,应该从最近开始写,而自我介绍,最好从毕业开始, 因为面试官希望从中看出你的发展轨迹,在介绍中,主要介绍自己在公司项目中的工作,而不是大篇幅的描述公司的产品, 他面试的是你,不是你的公司。 介绍了从毕业到现在工作的公司,担任的项目,稍微提下用到的一些技术点。 印象中不清楚的问题 1. static 内部类 与 非静态的区别 这个问题其实主要还是要理解static修饰词的作用 首先理解java内存的知识 http://bbs.csdn.net/topics/370001490 http://zhangtk.com/2015/05/19/Java%E4%B8%AD%E7%9A%84%E9%9D%99

Custom Handler on JMSSerializerBundle is ignored

醉酒当歌 提交于 2020-02-01 02:54:11
问题 I am attempting to use a custom handler for JMS Serializer Bundle class CustomHandler implements SubscribingHandlerInterface { public static function getSubscribingMethods() { return array( array( 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, 'format' => 'json', 'type' => 'integer', 'method' => 'serializeIntToJson', ), ); } public function serializeIntToJson(JsonSerializationVisitor $visitor, $int, array $type, Context $context) { die("GIVE ME SOMETHING"); } } This does nothing, and