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。
分享到:
相关推荐
在实际的开发过程中,实现动态Tip涉及以下几个关键知识点: 1. **事件监听**:为了使Tip动态响应用户操作,我们需要监听用户交互,如鼠标悬停、点击等,并在这些事件触发时显示或更新Tip内容。 2. **布局管理**:...
在实现【QQ Tip】功能时,主要涉及以下几个技术点: 1. **消息弹出机制**:首先,需要创建一个能够动态显示和隐藏的消息窗口。这通常涉及到Windows API或跨平台GUI库(如Qt、wxWidgets)的使用,通过调用相关函数来...
D3 Tip的使用主要涉及以下几个关键步骤: 1. **引入资源**:首先,你需要在HTML文件中引入D3.js和D3 Tip的库。D3.js通常是通过CDN链接或者本地文件引入,而D3 Tip可以通过npm安装后本地引用,或者直接在页面中使用...
在“Qt实现的自定义tip”项目中,开发者可能面临以下几个关键步骤: 1. **创建自定义提示框类**:首先,我们需要创建一个新的类,继承自QTipWidget或其他合适的Qt控件。这个类将包含我们自定义的形状、颜色、字体等...
二次开发主要涉及以下几个方面: 1. **图形设计**:利用TIPTOP提供的图形库,你可以创建各种形状、图像和动画,为界面增添视觉吸引力。理解图形库的API是设计的基础,如绘图函数、颜色管理等。 2. **布局管理**:...
在基于jQuery实现动态Tip提示时,我们需要考虑以下几个关键知识点: 1. **jQuery选择器**:jQuery提供了丰富的选择器,如`id`选择器(`#id`)、类选择器(`.class`)、元素选择器(`tagname`)等,用于定位DOM元素。在...
课程内容涵盖以下几个方面: 1. **TIPTOPGP的组织架构**: - 操作系统:TIPTOPGP支持多种Unix操作系统,包括Linux、AIX、Solaris、HP-UX以及Mac等。 - 数据库:使用Informix或Oracle作为数据库管理系统。 - 开发...
在提供的文件列表中,我们可以看到以下几个关键的源文件: - `PPHtmlDrawer.cpp`: 实现了HTML内容的绘制逻辑,这是cpp tooltip支持HTML格式的基础。 - `PPTooltip.cpp`: 主要包含`CPPTooltip`类的实现,包括创建、...
在"tiptop GP"财务流程中,我们可以讨论以下几个关键知识点: 1. **会计基础**:该系统的基础是会计原则,如权责发生制(Accrual Accounting)、复式记账法(Double-Entry Bookkeeping),确保财务数据的准确性和...
在过去的几十年中,TIP TOP一直代表着轮胎修补的最高质量水准,无时不在世界的每个角落证明着它的不凡,从单车胎,摩托车胎及小车胎到世界上目前最大的工程胎;从橡胶内胎,斜胶胎到子午线胎,都能用TIP TOP的材料和...
源代码可能包括以下几个关键部分: 1. **用户界面(UI)**:包括显示提示信息的视图和控制器,可能使用Storyboard或SwiftUI进行设计。 2. **TTS引擎**:使用AVFoundation框架中的AVSpeechSynthesizer类来实现文本到...
实现不规则窗口通常涉及以下几个步骤: 1. **设置窗口样式**:在大多数操作系统中,如Windows,你需要设置窗口的风格以允许非矩形形状。这可以通过调用系统API函数(如Windows API的`SetWindowLong`)来实现,将...
该函数需要三个输入参数: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的实现方式、优化技巧或源码解析会有更深入的理解。不过,基于标题和标签,我们可以推测文章可能会涵盖以下内容: 1. HTML和CSS基础:如何创建基本的...
实现Tip Of Day功能的过程大致包括以下几个步骤: 1. 设计界面布局,选择合适的控件展示提示内容。 2. 编写源码,实现提示的显示逻辑,包括随机显示、按日期显示或者按照用户喜好设置的顺序显示。 3. 创建和管理资源...
用法: $.tipMessage(提示语, 图标类型, 几秒后消失,zIndex,回调); jQuery.tipMessage = function (msg, type, time, zIndex, callback) 演示: $.tipMessage('欢迎使用!', 3, 3000,function(){alert('我是回调')})...
本文将深入探讨几个关键知识点,包括自定义文件夹栏目、自定义搜索管理器、信息条提示(Infotips)、获取BMP文件大小、DLL与EXE文件的导入表IAT,以及外壳扩展Shell Extension插件编程。 首先,自定义文件夹栏目是...
在进行课程设计时,我们需要关注以下几个关键步骤: 1. 单片机程序编写:使用汇编语言或C语言编写控制电机运行的程序。 2. 电路设计:设计TIP137驱动电路,包括输入控制信号、电机连接、保护电路等。 3. 仿真验证:...
在IT行业中,"Tip 信息提示小秘书"可能是一个软件工具或者编程实践,它专注于提供信息提示服务。从标题和描述来看,这个“小秘书”可能是用来帮助用户更好地理解和处理各种提示信息,尤其是在软件开发、系统管理和...
在实现过程中,插件可能包含以下几个核心组件: 1. **manifest.json**:这是每个Chrome扩展程序的核心配置文件,它包含了插件的基本信息,如名称、版本、权限和所执行的脚本。在Ecotek Tip&Trick New Tab-crx中,...