我正处于一个问题,我无法决定采取哪种解决方案.
这个问题有点独特.让我们这样说,我从网络连续接收数据(每秒2到4次).现在,每个数据都属于不同的组合.现在,让我们调用这些组,group1,group2等.
每个组都有一个专用的作业队列,来自网络的数据被过滤并添加到其相应的组进行处理.
起初我为每个组创建了一个专用线程,它将从作业队列中获取数据,处理它然后进入阻塞状态(使用链接阻塞队列).
但我的大四学生建议我应该使用线程池,因为这样线程不会被阻塞,并且可供其他组处理.
但事实上,数据即时获取的速度足够快,并且线程处理它的时间足够长,因此线程可能不会进入阻塞模式.这也将保证数据按顺序处理(作业1在作业2之前完成),这在汇集时可能不会发生.
我的大四学生也倾向于这样一个事实,即汇集也会为我们节省大量的内存,因为线程已经被淘汰了(我以为他真的想要这个词;)).虽然我不同意这个,因为,我个人认为,汇集与否每个线程都有自己的堆栈内存.除非线程池中有某些我不知道的东西.
最后一件事,我一直认为汇集有助于工作在短时间内出现大量工作.这是有道理的,因为线程生成会导致性能下降,因为初始化线程所花费的时间比执行作业所花费的时间多得多.所以汇集在这里有很多帮助.
但在我的情况下,group1,group2,...,groupN始终保持活着状态.因此,如果有数据,他们仍然会在那里.因此,线程产生不是问题所在.
我的大四学生不相信,并希望我采用汇集解决方案,因为它的内存占用很大.
那么,走哪条路呢?
谢谢.
我对泛型的认识是,他们可以帮助我简化我的汇集,但无法弄清楚如何.
我的汇集系统简约,但很混乱.而现在变得笨拙和凌乱,还有MESSY.它不能很好地扩展......
我的FXDistribrutor.cs类是附加到初始场景中的对象的组件,旨在永久存在于游戏的所有场景中.它有自己的静态引用,所以我可以轻松地从任何地方调用它.更多关于最后的设计.我甚至不确定这是否是"正确"的方式.但它很好用.
FXDistributor为它能够分发的每种类型的FX单元都有一个公共插槽,为这种类型的FX池提供一个数组,以及一个数组的索引和池的大小.
这是两个例子:
public BumperFX BmprFX;
BumperFX[] _poolOfBumperFX;
int _indexBumperFX, _poolSize = 10;
public LandingFX LndngFX;
LandingFX[] _poolOfLndngFX;
int _indexLndngFX, _poolSizeLndngFX = 5;
Run Code Online (Sandbox Code Playgroud)
在Unity Start调用中,我填写每个FX单元的池:
void Start(){
_poolOfBumperFX = new BumperFX[_poolSize];
for (var i = 0; i < _poolSize; i++) {
_poolOfBumperFX[i] = Instantiate(BmprFX, transform );
}
_poolOfLndngFX = new LandingFX[_poolSizeLndngFX];
for ( var i = 0; i < _poolSizeLndngFX; i++ ) {
_poolOfLndngFX[i] = Instantiate( LndngFX, transform );
}
}
Run Code Online (Sandbox Code Playgroud)
在课程的主体中,我为每种FX类型提供了一系列方法,以便在需要的地方提供它们:
public LandingFX GimmeLandingFX ( ){
if …
Run Code Online (Sandbox Code Playgroud) I'd like to ask if is it portable to rely on string literal address across translation units? I.e:
A given file foo.c
has a reference to a string literal "I'm a literal!"
, is it correct and portable to rely that in other given file, bar.c
in instance, that the same string literal "I'm a literal!"
will have the same memory address? Considering that each file will be translated to a individual .o
file.
For better illustration, follows an …
我在我的项目中使用Apache Tomcat JDBC连接池.我很困惑因为在重载下我一直看到以下错误:
12:26:36,410 ERROR [] (http-/XX.XXX.XXX.X:XXXXX-X) org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-/XX.XXX.XXX.X:XXXXX-X] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:4; busy:4; idle:0; lastwait:10000].
12:26:36,411 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/APP].[AppConf]] (http-/XX.XXX.XXX.X:XXXXX-X) JBWEB000236: Servlet.service() for servlet AppConf threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
我的期望是,对于池,对新连接的请求将保留在队列中,直到连接可用.相反,当池达到容量时,似乎拒绝了请求.这种行为可以改变吗?
谢谢,
达尔
这是我的池配置:
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:oracle:thin:@" + server + ":" + port + ":" + SID_SVC);
p.setDriverClassName("oracle.jdbc.driver.OracleDriver");
p.setUsername(username);
p.setPassword(password);
p.setMaxActive(4);
p.setInitialSize(1);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(300);
p.setMinEvictableIdleTimeMillis(150000);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1 from dual");
p.setMinIdle(1);
p.setMaxIdle(2);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;"
+ "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer");
Run Code Online (Sandbox Code Playgroud) 我一直在寻求在我的应用程序的一部分中实现池化。我想使用 Commons Pool 库,但有点担心close()
行为是如何工作的。通过查看javadocs和源代码,似乎不清楚在close()
调用该方法时池中创建的对象是否会被销毁。据我所知,只有池中空闲的对象才会被销毁——任何正在使用但尚未返回的对象都不会被触及。
我在这里错过了什么吗?我想确保在池关闭时所有对象都被正确销毁。
有没有人以前使用过它并且知道它是如何工作的?
何时使用C#进行对象池化?任何好的前...
维护经常使用的对象池并从池中抓取一个而不是创建一个新对象的专业人员和成员是什么?
我正在按照本教程关于如何在Spring中池化对象.我按照教程中的说明进行操作,但是当我运行我的应用程序时,它总是会生成一个新的对象实例.我期待,因为我正在汇集对象,现有的对象将被重用.因此,不应创建新实例.此外,当我访问bean的getter方法时,会再次创建bean的新实例.
我怎么可能做错了?我是否误解了Spring中汇集的概念?
以下是我的代码:
应用程序上下文:(这只是我的应用程序上下文的主体.)
<bean id="simpleBeanTarget" class="com.bean.SimpleBean" scope="prototype">
</bean>
<bean id="poolTargetSource" class="org.springframework.aop.target.CommonsPoolTargetSource">
<property name="targetBeanName" value="simpleBeanTarget" />
<property name="maxSize" value="2" />
</bean>
<bean id="simpleBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="poolTargetSource" />
</bean>
Run Code Online (Sandbox Code Playgroud)
控制器:(这只是我方法的主体)
@RequestMapping("/hello")
public ModelAndView helloWorld(HttpServletRequest request, HttpServletResponse response)
{
String message = "Hello World, Spring 3.";
try
{
System.out.println("Accessing Application Context");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("Getting Bean");
SimpleBean simpleBean = (SimpleBean) context.getBean("simpleBean");
//A new SimpleBean... is printed here.
System.out.println("Displaying Hello World: " + simpleBean.getRandomNum());
//After this …
Run Code Online (Sandbox Code Playgroud) 我试图理解之间的区别:
例如,我如何知道何时为我的应用添加更多app-cells?或者添加更多实例?或者将它们的某个子集配置到池中?提前致谢!
所以我最近开始TestNGException
尝试使用IDE运行现有的测试套件.最近我的意思是更新intelliJ和依赖项以尝试处理最新版本.失败的代码和堆栈跟踪如下 -
代码用法
ITests.java -
public class ITests extends BaseTest {
private final Action action = new Action();
}
Run Code Online (Sandbox Code Playgroud)
BaseTest(只是为了分享语法) -
public class BaseTest {
// where in this class does not use any instance of Http
}
Run Code Online (Sandbox Code Playgroud)
Action.java -
public class Action {
private final Http http = Http.getInstance();
}
Run Code Online (Sandbox Code Playgroud)
Http.java -
public class Http {
private static final Http INSTANCE = new Http(); //line 36
public static Http getInstance() {
return INSTANCE;
}
private Http() …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,我们正在优化使用样板 jdbc 代码的遗留代码库,而在我们的新项目中,我们使用 springs jdbcTemplate。我发现遗留代码中的查询时间快了两倍,并且很好奇它的 jdbcTemplate 是否有问题或其他什么......
我们使用 apache commons BasicDataSource(提供池化)。我的问题是,我不太确定池化是否真的正常工作。下面是我的配置...
数据源
数据源的接线
为了分析这一点,我启动了应用程序并连接了所有 jdbc 的东西,然后简单地运行相同的查询 100 次。我还使用 log4j 来获取有关实际性能的一些指标。1 行将打印实际的 jdbc 调用时间,我在整个 jdbcTemplate 调用周围有一个额外的包装器,以查看整个过程需要多长时间(如下所示)...
编辑:添加 RowMapper 的图像
下面显示了我的日志的样子......
DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL query
DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL statement [my select query]
DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC
Connection from DataSource
DEBUG com.custom.frameworkx.spring.datasource.DebugDataSource - before executeQuery() sql=my select query
DEBUG com.custom.frameworkx.spring.datasource.DebugDataSource - after executeQuery() [time=30ms] sql=my select query
DEBUG com.custom.frameworkx.spring.datasource.DebugDataSource -
DebugResultSet.close()
DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC …
Run Code Online (Sandbox Code Playgroud)