`

工作的几个tip

    博客分类:
  • java
阅读更多

1、如果用java6的ScriptEngineManager来调用JRuby,并且脚本使用到了Ruby的标准库(比如我用到了YAML库),如果没有正确设置,是会找不到标准库的。通过打印$:变量可以看到文件的加载路径,比如在某台机器上的打印的结果:
   puts $:
   输出:
.
/root/.jruby/lib/ruby/site_ruby/1.8
/root/.jruby/lib/ruby/site_ruby
/root/.jruby/lib/ruby/1.8
/root/.jruby/lib/ruby/1.8/java
lib/ruby/1.8
......略

显然,默认会到当前用户的主目录下寻找.jruby隐藏目录,将此目录作为Ruby的安装目录,因此,可以在~user/.jruby放置一个jruby实现,一劳永逸地解决问题,不然就要自己手工添加完整的路径到$:变量中。

2、nio的临时selector的使用,了解grizzly的都知道,Grizzly框架有一个比较与众不同的地方在于使用临时selector注册channel进行读或者写。这个带来什么好处呢?一个是,通常我们可能将read派发到其他线程中去,如果一次没有读完,那么就得继续注册OP_READ到主selector上;注意,nio在一些平台上有个问题,就是SelectionKey.interestOps方法跟Selector.select方法会有并发冲突,产生奇怪的现象,因此,你会看到大多数的nio框架都会保证SelectionKey.interestOps跟Selector.select的调用在同一个线程;在没有读完继续注册这个场景下,免不了线程间的context switch,如果采用一个临时selector注册并读取,就可以避免这个切换开销。另外,对于write调用,通常你可能这样写:

while (byteBuffer.hasRemaining()) {
  int len = socketChannel.write(byteBuffer);
  if (len < 0){
   throw new EOFException(); 
  }
}
 


   在负载比较高的时候,write返回0的次数会越来越多,while循环将空耗多次导致CPU占用偏高,这个问题在win32上比较严重,同样可以采用临时selector的解决(Cindy2.x是留在队列,等待下次写)。下例是采用临时Selector进行读的例子:

 Selector readSelector = SelectorFactory.getSelector();
                SelectionKey tmpKey = sc.register(readSelector,
                        SelectionKey.OP_READ);
                tmpKey.interestOps(tmpKey.interestOps() | SelectionKey.OP_READ);
                int code = readSelector.select(1000);
                tmpKey.interestOps(tmpKey.interestOps()
                        & (~SelectionKey.OP_READ));
                if (code > 0) {
                    do {
                        n = sc.read(in);
                    } while (n > 0 && in.hasRemaining());
                    in.flip();
                    decode();
                    in.compact();
                }
                SelectorFactory.returnSelector(readSelector);
 

<!---->      这样的方式,某种意义上可以认为是non-blocking模式下的阻塞读,在网络条件稳定的情况下(比如内网),能带来比较高的效率。

3、spymemcached ,是另一个memcached的java client实现,采用nio。最近遇到的问题是它跟原来的MemcachedClient 的兼容问题,用它去操作MemcachedClient存储的数据。spymemcached是通过Transcoder来实现序列化,Transcoder的WhalinTranscoder实现类兼容了Greg Whalin的MemcachedClient:

private Transcoder whalinTranscoder = new WhalinTranscoder();


Future<Object> f = memcachedClient.asyncGet(id, whalinTranscoder);
 


   各个方法都有重载的版本用以指定Transcoder。

1
1
分享到:
评论

相关推荐

    像QQ消息一样简单的Tip

    在实现【QQ Tip】功能时,主要涉及以下几个技术点: 1. **消息弹出机制**:首先,需要创建一个能够动态显示和隐藏的消息窗口。这通常涉及到Windows API或跨平台GUI库(如Qt、wxWidgets)的使用,通过调用相关函数来...

    DYI自己的TIPTOP顯示介面

    二次开发主要涉及以下几个方面: 1. **图形设计**:利用TIPTOP提供的图形库,你可以创建各种形状、图像和动画,为界面增添视觉吸引力。理解图形库的API是设计的基础,如绘图函数、颜色管理等。 2. **布局管理**:...

    动感的Tip提示效果,基于jquery的代码实现

    在基于jQuery实现动态Tip提示时,我们需要考虑以下几个关键知识点: 1. **jQuery选择器**:jQuery提供了丰富的选择器,如`id`选择器(`#id`)、类选择器(`.class`)、元素选择器(`tagname`)等,用于定位DOM元素。在...

    TIPTOP GP技術移轉-ORACLE版

    课程内容涵盖以下几个方面: 1. **TIPTOPGP的组织架构**: - 操作系统:TIPTOPGP支持多种Unix操作系统,包括Linux、AIX、Solaris、HP-UX以及Mac等。 - 数据库:使用Informix或Oracle作为数据库管理系统。 - 开发...

    vc tip 提示

    在提供的文件列表中,我们可以看到以下几个关键的源文件: - `PPHtmlDrawer.cpp`: 实现了HTML内容的绘制逻辑,这是cpp tooltip支持HTML格式的基础。 - `PPTooltip.cpp`: 主要包含`CPPTooltip`类的实现,包括创建、...

    TipTop基礎操作管理系統

    在过去的几十年中,TIP TOP一直代表着轮胎修补的最高质量水准,无时不在世界的每个角落证明着它的不凡,从单车胎,摩托车胎及小车胎到世界上目前最大的工程胎;从橡胶内胎,斜胶胎到子午线胎,都能用TIP TOP的材料和...

    不规则窗口示例, 自定义tip控件

    实现不规则窗口通常涉及以下几个步骤: 1. **设置窗口样式**:在大多数操作系统中,如Windows,你需要设置窗口的风格以允许非矩形形状。这可以通过调用系统API函数(如Windows API的`SetWindowLong`)来实现,将...

    TIPTOP内置函数

    该函数需要三个输入参数:ps_source 为来源资料、ps_count 为检查几码、li_result 为返回结果。返回值为 1(TRUE)或 0(FALSE)。用法示例:IF NOT cl_chk_data_continue(g_pmw.pmw01[1,3]) THEN ... cl_chkym ...

    Tip Of Day. It`s name speaks for itself.

    实现Tip Of Day功能的过程大致包括以下几个步骤: 1. 设计界面布局,选择合适的控件展示提示内容。 2. 编写源码,实现提示的显示逻辑,包括随机显示、按日期显示或者按照用户喜好设置的顺序显示。 3. 创建和管理资源...

    分享一个类似QQ空间的tip提示,基于jQuery

    用法: $.tipMessage(提示语, 图标类型, 几秒后消失,zIndex,回调); jQuery.tipMessage = function (msg, type, time, zIndex, callback) 演示: $.tipMessage('欢迎使用!', 3, 3000,function(){alert('我是回调')})...

    Java balloon Tip Tool (transparent-window)

    使用Java Balloon Tip Tool可以提高应用的交互性和美观性,同时避免了传统的弹出窗口可能会打断用户工作流程的问题。开发者可以根据自己的需求调整气球提示的大小、颜色、字体等属性,以适应不同的应用环境和用户...

    flash 的几个tooltip显示

    flash 的几个tooltip显示 大概 7 8 个 效果可以下来看

    周立功单片机c51tip.pdf

    书中可能涵盖了以下几个关键知识点: 1. **8051架构与指令集**:8051单片机的内部结构包括CPU、RAM、ROM、I/O端口等,其16位地址线使其能够访问64KB的存储空间。了解其指令集是编程的基础,包括数据处理指令、控制...

    Tip3000配电房站端在线监控系统.doc

    系统主要关注以下几个关键点: 1. **SF6和O3浓度监测**:配电房内SF6气体浓度的监测至关重要,因为高浓度的SF6可能对人体健康造成危害,同时,SF6泄漏也可能表明设备故障。系统能自动检测SF6浓度,当超过预设的1000...

    Tip3000配电房动力环境监控系统 配置清单.doc

    系统配置清单包括以下几个主要部分: 1. **SF6气体含量监测**:SF6(六氟化硫)是高压电气设备中的常用绝缘气体,但其对人体和环境有潜在危害。监控其含量可以预防泄漏,保障人员安全并维护设备正常运行。 2. **O2...

    精通MATLABGUI设计及原代码-MATLAB GUI编程中几个有用的程序段.doc

    在MATLAB GUI设计中,以下几个程序段展示了常见且实用的功能: 1. **获取和切换工作路径**: 在MATLAB中,`mfilename('fullpath')`用于获取当前运行脚本或函数的完整路径,而`fileparts()`函数则用于获取路径的...

    iOS 处理图片的一些小 Tip | Garan no dou1

    本文主要探讨了几个iOS处理图片的关键知识点。 首先,关于将GIF动图保存到相册,iOS的相册是支持GIF和APNG格式的,但无法直接播放。可以使用`ALAssetsLibrary`的`writeImageDataToSavedPhotosAlbum:metadata:...

    SWIFTER-100个Swift必备Tips(第二版)

    只赠有缘人.SWIFTER-100个Swift必备Tips(第二版)..支持最新的swift2.0,前几天刚更的.

    左耳朵耗子leetcode-ARTS:每周必须完成Algorithm一道算法的解析、Review一篇技术文章的阅读、Tip一个技术知识点的总结

    慢几步,深几度 - 我的ARTS 什么是ARTS? ARTS是由在其专栏发起的计划: 要求每周必须完成 Algorithm 一道算法的解析 Review 一篇英文文章的阅读 Tip 一个知识点的总结 Share 一个价值观的分享 为什么要做ARTS 积累...

    TIP TV-crx插件

    我们的扩展允许您在没有广告的情况下观看几个电视频道,没有锁定 tiptv,观看电影频道,运动,现场纪录片没有崩溃,没有广告! 最低推荐互联网速度转向SD频道没有裂缝:5兆 最低推荐车轮的互联网速度HD通道没有裂缝...

Global site tag (gtag.js) - Google Analytics