小编Jmo*_*y38的帖子

C++命名空间'使用'声明用于类的枚举

我很好地理解了C++"使用"声明和指令是如何工作的.但是,我对此感到难过......也许这不可能?我想避免质量我的枚举变量:

namespace Foo { 
   class MyClass {
      public: 
         enum MyEnum { X, Y, Z };
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,从该命名空间外部,我希望能够做到这样的事情:

using Foo::MyClass.MyEnum;
MyEnum letter = MyEnum::x;
Run Code Online (Sandbox Code Playgroud)

但显然那不是这样做的方法吗?我打赌这是可能的,但我的符号是错误的...我也尝试使用Foo :: MyClass :: MyEnum,但编译器认为Foo :: MyClass是一个命名空间.

补充:正如你所看到的,完全宣布一切都变得很烦人......

Foo::MyClass::MyEnum value = Foo::MyClass::X;
Run Code Online (Sandbox Code Playgroud)

c++ namespaces

10
推荐指数
2
解决办法
4134
查看次数

Tomcat - 在Http连接器中配置maxThreads和acceptCount

我目前使用Tomcat部署了一个应用程序,它通过JDBC与Postgres数据库交互.查询非常昂贵,所以我看到的是由Tomcat或Apache引起的超时(Apache在我的配置中位于Tomcat前面).我正在尝试将与数据库的连接限制为20-30个并发连接,这样数据库就不会被淹没.我使用\ ..配置完成了这项工作,将maxActive设置为30,将maxIdle设置为20.我还提升了maxWait.

在这种情况下,我限制了数据库的使用,但我希望连接/请求在Tomcat中是POOLED.Apache可以同时接受250个请求.所以我需要确保Tomcat也可以接受这么多,但要适当地处理它们.

Tomcat在HTTP Connector配置文件中有两个设置:

  • maxThreads - "Http Connector创建的请求处理线程的最大数量,因此决定了可以处理的最大并发请求数".
  • acceptCount - "当所有可能的请求处理线程都在使用时传入连接请求的最大队列长度.队列已满时收到的任何请求都将被拒绝."

所以我猜测如果我将maxThreads设置为最大JDBC连接数(30),那么我可以将acceptCount设置为250-30 = 220.

我不太明白在从池中打开的JDBC连接上的WAITING与排队的线程之间的区别...我的想法是排队的线程消耗的周期较少而正在运行的线程,等待JDBC池,将花费周期检查池中的免费线程......?

apache tomcat jdbc tomcat6

7
推荐指数
1
解决办法
9866
查看次数

DocumentDB Change Feed - 如何查看文档的所有更改

DocumentDB提供的这个新的Change Feed功能非常酷.但是,文档说明:

对文档的每次更改仅在更改Feed中出现一次.更改日志中仅包含给定文档的最新更改.可能无法进行中间更改.

基本上,如果文档来自修订版A-> B-> C,当轮询更改订阅源时,我们只会获得"C". - 我有一种情况,我想看到"A"和"B".

我知道有一些现有模式可以解决这个问题,但我真的希望利用这个新的Change Feed功能.我希望它会返回A,B和C.

此功能的目的是让"工作人员"非常频繁地轮询服务吗?显然,工人投票越频繁,他们越不可能跳过对文档的修订.但是,我不希望因此对集合的性能产生负面影响.

azure azure-cosmosdb

6
推荐指数
1
解决办法
3792
查看次数

数组性能与LinkedList非常相似 - 给出了什么?

所以标题有点误导......我会保持这个简单:我正在比较这两个数据结构:

  1. 一个数组,从大小开始,每次后续添加,都有一个realloc()调用来扩展内存,然后将新的(malloced)元素追加到n-1位置.
  2. 一个链表,我跟踪头部,尾部和大小.另外还涉及mallocing一个新元素并更新尾指针和大小.

不要担心这些数据结构的任何其他细节.这是我对此测试唯一关注的功能.

理论上,LL应该表现得更好.然而,它们在涉及10,100,1000 ......多达5,000,000个元素的时间测试中几乎相同.

我的直觉是堆很大.我认为Redhat上的数据段默认为10 MB?我错了.无论如何,realloc()首先检查在已分配的连续内存位置(0- [n-1])的末尾是否有空间可用.如果第n个位置可用,则不会重新定位元素.相反,realloc()只保留旧空间+紧接着的空格.我很难找到这方面的证据,而且我很难证明这个阵列在实践中应该比LL更差.

以下是阅读以下帖子后的进一步分析:

[更新#1]我已经修改了代码,使其具有一个单独的列表,该列表为LL和数组每隔50次迭代执行mallocs内存.对阵列增加了100万,几乎总是有18个动作.没有移动LL的概念.我做了一个时间比较,他们仍然几乎相同.这里有1000万个新增内容:

(Array)
time ./a.out a 10,000,000
real    0m31.266s
user    0m4.482s
sys     0m1.493s
(LL)
time ./a.out l 10,000,000
real    0m31.057s
user    0m4.696s
sys     0m1.297s
Run Code Online (Sandbox Code Playgroud)

我希望时间与18个动作完全不同.数组添加需要1次分配和1次比较以获取并检查realloc的返回值以确保发生移动.

[更新#2]我在上面发布的测试中运行了一个ltrace,我认为这是一个有趣的结果......看起来像realloc(或一些内存管理器)正在抢先将数组移动到更大的连续位置,基于目前的规模.对于500次迭代,在迭代时触发存储器移动:1,2,4,7,11,18,28,43,66,101,154,235,358这非常接近求和序列.我发现这很有意思 - 以为我会发布它.

c unix arrays performance linked-list

4
推荐指数
1
解决办法
760
查看次数