我有两个goroutines独立生成数据,每个数据都发送到一个频道.在我的主要goroutine中,我想在它们进入时消耗每个输出,但不关心它们进入的顺序.每个通道在耗尽其输出时将自行关闭.虽然select语句是像这样独立地使用输入的最好的语法,但我还没有看到一种简洁的方法来循环遍历每个通道,直到两个通道都关闭.
for {
select {
case p, ok := <-mins:
if ok {
fmt.Println("Min:", p) //consume output
}
case p, ok := <-maxs:
if ok {
fmt.Println("Max:", p) //consume output
}
//default: //can't guarantee this won't happen while channels are open
// break //ideally I would leave the infinite loop
//only when both channels are done
}
}
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是以下内容(只是草拟,可能有编译错误):
for {
minDone, maxDone := false, false
select {
case p, ok := <-mins:
if ok {
fmt.Println("Min:", p) //consume output …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个简单的移位密码iPhone应用程序作为宠物项目,我正在设计的一项功能是NSString的"通用"解密,它返回NSArray,所有NSStrings:
- (NSArray*) decryptString: (NSString*)ciphertext{
NSMutableArray* theDecryptions = [NSMutableArray arrayWithCapacity:ALPHABET];
for (int i = 0; i < ALPHABET; ++i) {
NSString* theNewPlainText = [self decryptString:ciphertext ForShift:i];
[theDecryptions insertObject:theNewPlainText
atIndex:i];
}
return theDecryptions;
Run Code Online (Sandbox Code Playgroud)
}
我真的想把这个NSArray传递给另一个尝试拼写检查数组中每个单独字符串的方法,并构建一个新数组,将字符串中最少的字符串放在较低的标记处,这样它们就会首先显示出来.我想像文本字段那样使用系统的字典,所以我可以匹配用户训练到手机中的单词.
我目前的猜测是将给定的字符串拆分为单词,然后使用NSSpellChecker进行拼写检查,-checkSpellingOfString:StartingAt:
并使用正确的单词数对数组进行排序.是否有现有的库方法或广为接受的模式,有助于为给定的字符串返回这样的值?
我遇到了C++ 的 SPECS 替代语法,虽然我不确定我是否喜欢他们所做的一些更无端的语法更改(例如,将指针从 * 更改为 ^),但它让我想到了调整和实施新语法。SPECS 声称在语义上与 C++ 相同,并且 Clang 非常模块化,因此我认为编写 Clang 的 AST 并利用所有预先存在的代码应该不会太难。
话虽这么说,我不太确定修改 Clang 当前的 Lexer 和 Parser 以接受不同的标记和排序(从而利用它们的错误消息)有多容易,或者是否更容易做到这一点而不是编写一个单独的解析器,只调用 Clang 的 AST。在过去的几天里,我一直在研究文档,但我想知道这里是否有对代码库有更多经验的人可以给我一些关于我是否应该搜索的意见
我有一个关于Ruby VM(Ruby解释器)的一般问题.它如何与多处理器一起使用?关于Ruby中的并行性和并发性,假设我有4个处理器.VM是否会通过内核自动为处理器分配任务?通过扩展,可以说我的ruby进程占用了大量的CPU资源; 如果添加新处理器会发生什么?OS是否负责将任务分配给处理器,或者每个VM是否在一个处理器上运行?扩展我的ruby应用程序的最佳方法是什么?我尽可能地分离我的进程并使用amqp队列.还有其他想法吗?
如果你能给我链接以获得更多解释,那就太好了.
提前致谢.
ruby parallel-processing concurrency scalability multiprocessing
c++ ×1
clang ×1
cocoa ×1
cocoa-touch ×1
concurrency ×1
go ×1
objective-c ×1
parsing ×1
ruby ×1
scalability ×1