您可以在objective-c中声明一个方法,并基本上将每个参数命名为两次.
我觉得这很强大,但我还不确定如何使用它......
当John Greets Kelly:
[ p Greet:"John" toPerson:"Kelly" greetWith:"hey babe" ] ;
关于它的一些东西不能自然地阅读.我不确定这是一个经验丰富的Objective-c程序员是如何写出"消息"的.
有人可以解释每个参数的两个名称的原因,并可能是一个更有用的例子,说明如何有效地使用它来在程序中加入意义?
还有什么困扰我,这是第一个参数的名称基本上与' 消息 ' 的名称相同.你如何通过编写有意义且易于理解的方法/'消息名称'来解决这个问题?
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
}
-(void)Greet:(char*)from toPerson:(char*)to greetWith:(char*)greeting ;
@end
@implementation Person
-(void)Greet:(char*)from toPerson:(char*)to greetWith:(char*)greeting ;
{
printf( "%s says %s to %s\n", from, greeting, to ) ;
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Person * p = [ Person … 在性能方面,消息传递并发方案和基于锁的并发方案之间究竟有什么区别?正在等待锁定的线程阻塞,因此其他线程可以运行.因此,我没有看到消息传递如何比基于锁的并发更快.
编辑:具体来说,我正在讨论像Erlang中的消息传递方法,与使用锁(或原子操作)的共享数据方法相比.
我正在开发一个扩展,当用户在弹出窗口上按下按钮时,我必须从linkedin配置文件页面中提取数据.我,正在将消息从popup.js页面传递给contentscript,作为回应,我将通过内容脚本从linkedin配置文件页面中提取数据,以便我可以在popup.html中显示它.但是,当我检查popup.html时,我收到了错误.错误是:
Port: Could not establish connection. Receiving end does not exist. lastError:29
Error in event handler for 'undefined': Cannot read property 'farewell' of undefined
TypeError: Cannot read property 'farewell' of undefined
at chrome-extension://kdfgoafjicddfffdbfofdmckejemfije/popup.js:6:25
at <error: illegal access>
at Event.dispatchToListener (event_bindings:356:21)
at Event.dispatch_ (event_bindings:342:27)
at Event.dispatch (event_bindings:362:17)
at Object.chromeHidden.Port.dispatchOnDisconnect (miscellaneous_bindings:258:27)
Run Code Online (Sandbox Code Playgroud)
作为参考,我的清单文件是:
{
"name": "SoftwareGrid",
"version": "0.5",
"icons": { "16": "icons/16.png","48": "icons/48.png", "128": "icons/128.png" },
"description": "Shows user cresidentials on Linkedin",
"permissions": [
"cookies",
"tabs",
"http://www.linkedin.com/*"
],
"browser_action": {
"default_title": "Show Profile", …Run Code Online (Sandbox Code Playgroud) javascript message-passing google-chrome-extension content-script
我是一个Objective-C开发人员,将应用程序移植到.Net世界.在我的Obj-C应用程序中,我使用NSNotification对象在少数对象之间进行异步通信.有没有办法在.Net世界中做类似的事情(更具体地说,使用C#语言)?基本方法是一个对象发布一个或多个对象侦听的通知.
可能有一种明显的方法可以做到这一点,但我还没有找到它......
如何获取用于打开程序的文件的位置?
示例:如果我创建一个新的扩展".xyz"说,我告诉Windows我想用myapplication打开文件类型.xyz,然后它启动我的应用程序.很好,但我的应用程序如何处理用于启动它的文件的文件路径?
此外,有没有办法只保留我的应用程序的一个版本运行和打开的新文件只是调用我的应用程序中的方法?例如,如果您使用torrent并打开5个.torrent文件,他们只会传递给一个应用程序.
附带问题:所有文件扩展名都是3个字母长,是否有一个公开使用的列表?如果我正在创建文件扩展名,我不想使用已经使用过的文件扩展名.
我正处于编程语言的设计阶段,目前正在考虑并发方面.我需要弄清楚一致性模型,即如何用这种语言编程的并发进程处理数据.
有两个重要标准:
我现在的两个候选人一方面是非阻塞软件事务内存,并且在不共享 la Erlang的情况下复制消息传递语义.
我特别担心易用性,所以我将提出我对这两个模型中的每个模型的主要论点.
对于STM,用户必须了解类的成员必须原子地变异并正确地划分原子代码段.这些必须写入,以便它们可以重复不定义的次数,它们可能不执行任何I/O,可能不会调用某些外部函数等.我认为这对于没有经验的程序员来说很容易.
Erlang风格的无共享并发性很有吸引力,但有一个问题:实时进程无法复制它们发送的对象,因为它们无法执行任何内存分配,因此对象必须从一个进程"移动"到另一个进程通过队列.用户必须知道,如果一个实时进程有两个对象的引用,那么如果他将对象发送到另一个进程,那么这两个引用都将被清除.这有点像弱指针,在任何使用点都可能为空,也可能不为空:它可能会令人惊讶.
我倾向于第二个模型,因为它看起来更容易理解,它自然地扩展到分布式系统.
您有什么推荐的吗?
concurrency language-design transactional-memory message-passing
我在OCaml.
我希望模拟通信节点,以查看消息在不同通信方案下传播的速度等.
节点可以1.发送和2.接收固定消息.我想明显要做的是将每个节点作为一个单独的线程.
显然,您可以使用事件模块和通道获取线程以相互传递消息,但我找不到任何此示例.有人能指出我正确的方向还是只给我一个简单的相关例子?
非常感谢.
我目前正在尝试使用 ZMQ 作为 IPC 的可能消息代理。
版本 -> ZMQv4
我正在使用pebbe ZMQ,这是一个基于 zmq 的 C 库的 go 库并执行测试。
我正在以 1500 条消息/秒和 10000 条消息/秒的消息速率对其进行速率测试。
我正在使用 XPUB-XSUB 架构,发布者和订阅者连接到代理。
我知道 go 库只是一个包装器,因此实际发送和接收消息涉及 c-go 调用。
我正在ARM架构的设备上进行实验。我看到在代理本身上以 1500 条消息/秒的速率传递消息时,CPU 使用率几乎为 40-50%(100% 为 ~1GB,RAM 上为 ~900MB,交换内存为 ~100MB)。
我不确定这是否可以或使用率很高。不太确定在这里用什么作为码尺。
我运行了分析测试,发现运行时 cgocall 和运行时 _ExternalCode 占用了大部分 CPU。已附上个人资料图的图像(不知道如何上传 SVG)。
我试图了解或减少 CPU 使用率。根据这份资料,我认为我无能为力。有没有办法减少由于 C Go 调用和配置文件中显示的外部代码块而导致的 CPU 占用。
之前没有真正做过分析,所以可能不知道很多事情。
重现示例的代码:
ZMQ经纪商
import (
"fmt"
zmq "github.com/pebbe/zmq4"
"github.com/pkg/profile"
)
func main() {
defer profile.Start(profile.CPUProfile, profile.ProfilePath(".")).Stop()
fmt.Println("Setting up XSUB socket")
subscriberSocket, err := …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用读取 STDIN 并写入 STDOUT 的外部进程。
我想在 Elixir 中编写与此等效的代码,而不使用外部库或包装脚本:
$ echo foo | nkf
foo
Run Code Online (Sandbox Code Playgroud)
即发送数据到标准输入,并从标准输出nkf返回转换后的结果,知道它已经完成了流的处理。nkf
我试图用端口来做到这一点,但问题是单个发送的消息可以在多个接收到的消息中返回,因此无法判断何时到达消息末尾(简化的示例,实际上"foo"是一个整个文件):
iex(1)> port = Port.open({:spawn, "nkf -u"}, [:binary])
#Port<0.7>
iex(2)> Port.command(port, "foo")
true
iex(3)> flush
{#Port<0.7>, {:data, "fo"}}
{#Port<0.7>, {:data, "o"}}
:ok
Run Code Online (Sandbox Code Playgroud)
如何在 Elixir 中获得与 Ports 相同的 bash 管道行为?
经过认真的发展,CPU 获得了许多核心,在多个小芯片、numa 系统等上获得了分布式核心块,但数据仍然不仅必须通过 L1 缓存(如果在同一核心 SMT 上),而且还必须通过一些原子/互斥同步未经硬件加速的原始过程。
我想知道为什么英特尔或 IBM 没有想出这样的东西:
movcor 1 MX 5 <---- sends 5 to Messaging register of core 1
pipe 1 1 1 <---- pushes data=1 to pipe=1 of core=1 and core1 needs to pop it
bcast 1 <--- broadcasts 1 to all cores' pipe-0
Run Code Online (Sandbox Code Playgroud)
使其比其他方法快得多?GPU 支持块级快速同步点,例如barrier()或__syncthreads()。GPU 还支持本地阵列的并行原子更新加速。
当 CPU 增加 256 个核心时,此功能是否不会为在核心到核心带宽(和/或延迟)上遇到瓶颈的各种算法提供严重的扩展?