首页 \ 问答 \ 什么是 IO 模型

什么是 IO 模型

更新时间:2022-05-09 06:05

最满意答案

#include
#include 
#include string.h>
#include 
#include 
#include 
#define TRUE 1static const char* state2String(int state)
{
if (state == 0)return "CLOSED_STATE";
if (state == ZOO_CONNECTING_STATE)return "CONNECTING_STATE";
if (state == ZOO_ASSOCIATING_STATE)return "ASSOCIATING_STATE";
if (state == ZOO_CONNECTED_STATE)return "CONNECTED_STATE";
if (state == ZOO_EXPIRED_SESSION_STATE)return "EXPIRED_SESSION_STATE";
if (state == ZOO_AUTH_FAILED_STATE)return "AUTH_FAILED_STATE";
return "INVALID_STATE";

}
static const char* type2String(int state)
{if (state == ZOO_CREATED_EVENT)return "CREATED_EVENT";
if (state == ZOO_DELETED_EVENT)return "DELETED_EVENT";
if (state == ZOO_CHANGED_EVENT)return "CHANGED_EVENT";
if (state == ZOO_CHILD_EVENT)return "CHILD_EVENT";
if (state == ZOO_SESSION_EVENT)return "SESSION_EVENT";
if (state == ZOO_NOTWATCHING_EVENT)return "NOTWATCHING_EVENT";return "UNKNOWN_EVENT_TYPE";
}
void zktest_dump_stat(const struct Stat *stat) 
{char tctimes[40];char tmtimes[40];
    time_t tctime;
    time_t tmtime;if (!stat) 
    {
        fprintf(stderr,"null\n");
        return;
    }
    tctime = stat->ctime/1000;
    tmtime = stat->mtime/1000;

    ctime_r(&tmtime, tmtimes);
    ctime_r(&tctime, tctimes);

    fprintf(stderr, "\tctime = %s\tczxid=%llx\n""\tmtime=%s\tmzxid=%llx\n""\tversion=%x\taversion=%x\n""\tephemeralOwner = %llx\n",
            tctimes, stat->czxid,
            tmtimes, stat->mzxid,
            (unsigned int)stat->version, (unsigned int)stat->aversion,
            stat->ephemeralOwner);
}
void zktest_data_completion(int rc, const char *value, int value_len, const struct Stat *stat, const void *data)
 {
    fprintf(stderr, "in data completion [%s]: rc = %d\n", value, rc);
    zktest_dump_stat(stat);
}
/*process a list of string and stat*/void zktest_strings_stat_completion(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data)
 {int i=0;
    fprintf(stderr, "in strings state completion [%s]: rc = %d, string count %d\n", (char *)data, rc, strings ->count);for (i=0; icount; i++) {
        printf("%d: %s\n", i, strings->data[i]);
    }
deallocate_String_vector(strings);
    zktest_dump_stat(stat);
}void zktest_string_completion(int rc, const char *name, const void *data)
 {
    fprintf(stderr, "in string completion [%s]: rc = %d\n", (char*)(data==0?"null":data), rc);
    if (!rc)
     {
        fprintf(stderr, "\tname = %s\n", name);
    }
}void zktest_stat_completion(int rc, const struct Stat *stat, const void *data)
 {if (rc == ZNONODE)
    {
        printf("node not exists\n");
    }
    fprintf(stderr, "in state completion rc = %d data=%s stat:\n", rc, (char *)data);
    zktest_dump_stat(stat);

}

其他回答

CuratorFramework
Curator框架提供了一套高级的API, 简化了ZooKeeper的操作。 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制。 这些特性包括:

自动化的连接管理: 重新建立到ZooKeeper的连接和重试机制存在一些潜在的错误case。 Curator帮助你处理这些事情,对你来说是透明的。
清理API:
简化了原生的ZooKeeper的方法,事件等
提供了一个现代的流式接口
提供了Recipes实现: 如前面的文章介绍的那样,基于这些Recipes可以创建很多复杂的分布式应用
Curator框架通过CuratorFrameworkFactory以工厂模式和builder模式创建CuratorFramework实 例

相关问答

更多
  • #include #include #include string.h> #include #include #include #define TRUE 1static const char* state2String(int state) { if (state == 0)return "CLOSED_STATE"; if (state == ZOO_CONNECTING_STATE)return "CONNECTING_STATE"; if (state == ZOO_ASSOCIATING_STATE ...
  • Boost中有一个类似的库, boost :: atomic,但它尚未包含在标准的AFAIK中。 There is a similar library in Boost, boost::atomic but it's not yet included in the standard AFAIK.
  • 好吧,我暂时忽略任何SQL的东西,只关注uniqueInvocationNumber部分。 这里有两个问题: 无法保证线程在任何特定点都能看到最新值 增量不是原子的 在Java中解决此问题的最简单方法是使用AtomicInteger : private static final AtomicInteger uniqueInvocationNumber = new AtomicInteger(); public static Whatever getData(ValidatedQuery validated ...
  • 从多个线程读取内存是线程安全的。 当你在遇到麻烦的同时改变和阅读记忆时。 Reading memory from multiple threads is thread safe. Its when you're changing and reading memory at the same time that you run into troubles.
  • 不,你没有使这些调用是线程安全的 - 因为_stringArrayList字段是受保护的。 子类可以做任何他们喜欢的事情,而AddString和ToString被调用。 例如(另一个答案声称你的代码是线程安全的。) public class BadStringMe : StringMe { public void FurtleWithList() { while (true) { _stringArrayList.Add("Eek!") ...
  • 首先,让你的课程实现一个合适的界面。 这样,客户可以测试他们的行为,而不需要真正的文件。 测试线程的安全性是很难的 - 我从来没有看到任何在这方面非常有用的东西,但这并不是说工具不在那里。 对于单元测试你的课程,我建议如果可能的话,它应该使用一般的流而不仅仅是一个文件。 然后,您可以在测试程序集中嵌入不同的测试文件,并使用GetManifestResourceStream引用它们。 过去我已经做了好几次,取得了很大的成功。 Firstly, make your class implement an appr ...
  • HttpContext类不是线程安全的。 例如, HttpContext.Items属性只是对非同步Hashtable的引用 - 因此这显然不是线程安全的。 从你的问题中不清楚你想要在并行任务之间分享什么,但我建议你使用你自己的线程安全类的实例来共享任务之间的状态,而不是试图包装现有的类。 The HttpContext class is not thread-safe. For example, the HttpContext.Items property is just a reference to a ...
  • 这是shared_ptr用于实现线程安全的有趣用法。 是否正常取决于boost::shared_ptr的线程安全保证。 特别是,它是否建立了某种类型的fence或membar,以便保证在指针值的任何修改变为可见之前,构造函数和set insert函数中的所有写入都会发生。 我在智能指针的Boost文档中找不到任何线程安全保证。 这让我感到震惊,因为我确信有一些。 但是快速查看1.47.0的源代码显示无,并且在线程环境中使用boost::shared_ptr将会失败。 (请有人请指出我缺少的东西。我无法相信b ...
  • 您不指定数据的结构,但通常同时从多个线程读取内存是安全的,不会引入任何性能问题。 如果有人写作,你只会遇到问题。 有趣的是,你说你只能在两个线程中加速30%。 如果你有一台空闲的机器,两个或两个以上的CPU,并且只有只读共享数据(即没有同步),我希望看到更接近50%的速度提升。 这表明您的操作实际上很快完成,创建线程的开销在您的数字中变得非常重要。 你是在超线程CPU上运行吗? You don't specify how your data is structured, but in general rea ...
  • 我觉得你对Java如何运作有点困惑。 如果你有一个A类而一个B extends A类B extends A ,当你实例化B就有一个B 它不像A支持所有B实例的单个实例。 没有“基类管理”。 通过XML,注释或约定声明为动作的类由Struts动作实例化机制实例化。 扩展ActionSupport (几乎)与它无关,它可能与它有关的唯一时间是因为ActionSupport实现了Action接口。 I think you're a bit confused about how Java works. If you ...

相关文章

更多

最新问答

更多
  • 如何在Laravel 5.2中使用paginate与关系?(How to use paginate with relationships in Laravel 5.2?)
  • linux的常用命令干什么用的
  • 由于有四个新控制器,Auth刀片是否有任何变化?(Are there any changes in Auth blades due to four new controllers?)
  • 如何交换返回集中的行?(How to swap rows in a return set?)
  • 在ios 7中的UITableView部分周围绘制边界线(draw borderline around UITableView section in ios 7)
  • 使用Boost.Spirit Qi和Lex时的空白队长(Whitespace skipper when using Boost.Spirit Qi and Lex)
  • Java中的不可变类(Immutable class in Java)
  • WordPress发布查询(WordPress post query)
  • 如何在关系数据库中存储与IPv6兼容的地址(How to store IPv6-compatible address in a relational database)
  • 是否可以检查对象值的条件并返回密钥?(Is it possible to check the condition of a value of an object and JUST return the key?)
  • GEP分段错误LLVM C ++ API(GEP segmentation fault LLVM C++ API)
  • 绑定属性设置器未被调用(Bound Property Setter not getting Called)
  • linux ubuntu14.04版没有那个文件或目录
  • 如何使用JSF EL表达式在param中迭代变量(How to iterate over variable in param using JSF EL expression)
  • 是否有可能在WPF中的一个单独的进程中隔离一些控件?(Is it possible to isolate some controls in a separate process in WPF?)
  • 使用Python 2.7的MSI安装的默认安装目录是什么?(What is the default installation directory with an MSI install of Python 2.7?)
  • 寻求多次出现的表达式(Seeking for more than one occurrence of an expression)
  • ckeditor config.protectedSource不适用于editor.insertHtml上的html元素属性(ckeditor config.protectedSource dont work for html element attributes on editor.insertHtml)
  • linux只知道文件名,不知道在哪个目录,怎么找到文件所在目录
  • Actionscript:检查字符串是否包含域或子域(Actionscript: check if string contains domain or subdomain)
  • 将CouchDB与AJAX一起使用是否安全?(Is it safe to use CouchDB with AJAX?)
  • 懒惰地初始化AutoMapper(Lazily initializing AutoMapper)
  • 使用hasclass为多个div与一个按钮问题(using hasclass for multiple divs with one button Problems)
  • Windows Phone 7:检查资源是否存在(Windows Phone 7: Check If Resource Exists)
  • 无法在新线程中从FREContext调用getActivity()?(Can't call getActivity() from FREContext in a new thread?)
  • 在Alpine上升级到postgres96(/ usr / bin / pg_dump:没有这样的文件或目录)(Upgrade to postgres96 on Alpine (/usr/bin/pg_dump: No such file or directory))
  • 如何按部门显示报告(How to display a report by Department wise)
  • Facebook墙贴在需要访问令牌密钥后无法正常工作(Facebook wall post not working after access token key required)
  • Javascript - 如何在不擦除输入的情况下更改标签的innerText(Javascript - how to change innerText of label while not wiping out the input)
  • WooCommerce / WordPress - 不显示具有特定标题的产品(WooCommerce/WordPress - Products with specific titles are not displayed)