我想写三个并发的例程,它们相互发送整数.现在,我的代码被正确编译,但是在第一次执行之后它会给出错误"所有goroutines都睡着了 - 死锁!".我试图找到错误,但我无法在代码逻辑中找到任何错误.任何人都可以帮我找到我的代码的错误.我的代码如下.提前致谢.
package main
import "rand"
func Routine1(command12 chan int, response12 chan int, command13 chan int, response13 chan int) {
for i := 0; i < 10; i++ {
y := rand.Intn(10)
if y%2 == 0 {
command12 <- y
}
if y%2 != 0 {
command13 <- y
}
select {
case cmd1 := <-response12:
print(cmd1, " 1st\n")
case cmd2 := <-response13:
print(cmd2, " 1st\n")
}
}
close(command12)
}
func Routine2(command12 chan int, response12 chan int, command23 chan …Run Code Online (Sandbox Code Playgroud) 我在我的代码中使用HashMultiMap.现在,我的代码定期得到一些比特.我存储在一个字符串中(例如String str ="0110011100").然后将其转换为int并将其存储为我的HashMultiMap键/值.是否可以将其存储为位而不是将其存储为int/string?这样可以节省地图的空间吗?实际上,字符串的位数多于字节且小于int(比如说14位).所以,我希望通过将其存储为位来节省空间.谢谢.
我必须在磁盘文件中写入一系列字符,并且我想使用批量写入来减少磁盘 I/O。目前,我正在使用文件编写器类。然而,它太慢了。任何人都可以帮助我如何在 Java 中执行批量写入,例如维护一个大缓冲区并定期刷新它。
我有一个长度为128个字符的布尔字符串(如"01100..001")(表示128个数字为0/1).我在Java中搜索一个高效(快速)的哈希函数,它产生的表示比128位低得多,而且碰撞明显减少.任何人都可以帮助我,有没有这样的哈希函数?有什么建议吗?
我的问题是关于:Public String(char [] value)。有人可以帮我吗:它是否在内部为每个值[i]循环。特别,
Public String(char [] value)的含义是:
for each char[i]
returnedSTRING = returnedSTRING + char[i]
Run Code Online (Sandbox Code Playgroud)
或不 ?
我正在尝试为我们的服务器编写代码,我必须通过URL查找用户访问类型.
现在,在开始时,我们看到每天访问1亿个不同的URL.现在,到那时它每天变成近6亿个不同的URL.
对于1亿,我们所做的是:
1)使用并行数组构建HashMap,其键是URL的一部分(表示为LONG),值是URL的其他部分(表示为INT) - 键可以有多个值.
2)然后搜索HashMap以查找访问的URL时间.
现在,随着HashTable变得越来越大,我们所做的就是:
1)构建两个/三个单独的HashTable,并加载和存储它(在通用文件系统上)以查找URL访问的次数.
现在,问题是,
1)虽然HashTable性能相当不错,但是在加载/存储HashTable时代码需要更多时间(我们使用文件通道,加载/存储HashTable需要16-19秒 - 20000万条入口 - 因为加载因子是0.5)
我们要问的是:
1)如何解决这个问题?
2)如何减少加载/存储时间(我以前问过,但似乎文件通道是最好的方式)?
3)存储一个大的HashTable(超过内存)并重复缓存它将是一个很好的解决方案?如果是这样,怎么做(至少一些指针).我们尝试使用
RandomAccessFile raf = new RandomAccessFile("array.dat", "rw");
IntBuffer map = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 1 << 30).order(ByteOrder.nativeOrder()).asIntBuffer();
Run Code Online (Sandbox Code Playgroud)
然而,比以前更糟糕的表现.
谢谢.
注意:
1)根据之前的Stack Overflow建议,我们使用一些像TokyoCabinet这样的NoSQL DB,但根据我们的经验,自定义HashTable比1亿个键值对提供更好的性能.
2)磁盘缓存的预读数据是不可能的,因为当系统启动时,我们的应用程序将开始工作,并在系统启动的第二天开始工作.
我们忘了提到的是:
1)由于我们的应用程序是项目的一部分并且应用于小型园区,因此我们假设访问的URL不超过8亿.因此,您可以认为600/700数据值是固定的.
2)我们主要关心的是表现.
3)我们必须在本地运行我们的应用程序.
我必须使用特定版本的gcc编译器运行make命令(使用gcc-4.1,因为在该版本之后将提供已弃用的方法警告或错误)..现在,在服务器中安装了几个版本的gcc.任何人都可以帮助,我如何运行它(make命令)到特定版本的gcc编译器(在gcc-4.1上的意思).
我有三个这样的并发例程,
func Routine1() {
Print (value a, value b, value c)
Print (value a, value b, value c)
Print (value a, value b, value c)
}
func Routine2() {
Print (value e, value f, value g)
Print (value e, value f, value g)
Print (value e, value f, value g)
}
func Routine3() {
Print (value x, value y, value z)
Print (value x, value y, value z)
Print (value x, value y, value z)
}
func main() {
go …Run Code Online (Sandbox Code Playgroud) 我在一个长数组中有一系列长数字。我想获取每个 Long 数字并想获得它的第一位,根据第一位,我想处理其他位。就像下面的伪代码,
i = 1000000 ;
long[] a = new long[i];
for j = 0 to i
do,
get long lo = a[i];
// get first bit of lo
if first bit = 0
print long number (by removing first bit) in file a1
else
print long number (by removing first bit) in file a2
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我,“获得那个长数字的第一位”和“删除第一位并获得数字”的最快方法是什么?